mirror of
https://github.com/stablyai/orca.git
synced 2026-09-21 16:02:20 +00:00
1677 lines
116 KiB
Markdown
1677 lines
116 KiB
Markdown
# Agent skill sharing implementation checklist
|
|
|
|
Status: implementation and validation in progress.
|
|
|
|
Last updated: 2026-08-12.
|
|
|
|
Implementation baselines captured by this checklist update:
|
|
|
|
- Orca implementation: `skills-share` through `607e31dd04`; no PR.
|
|
- Orca Cloud: bundle smoke PR `#329` merged as `eddb144afe`; generation-aware recovery PR `#330`
|
|
merged as `8045c85dad`; encrypted physical-host credential PR `#336` merged as `8fce3298ef`;
|
|
kill-switch discovery PR `#342` merged as `c2bef2ff20fb`.
|
|
Windows device-name validation PR `#343` merged as `dbb14a658cbc`; explicit disabled production
|
|
bootstrap PR `#352` merged as `2a23f6ace5`; publisher-identity omission PR `#355` merged as
|
|
`b3213bd34d1b224d8a3b11527eceaac883965400`; production enablement PR `#357`, bounded OIDC smoke
|
|
PR `#358`, monitor IAM PR `#359`, and monitor release-ownership PRs `#360`/`#361` are merged
|
|
through `d8605edde72229c5d00d22c8bd6853a13c1a4aaa`.
|
|
|
|
Validated so far:
|
|
|
|
- Current release hardening cancels bundle extraction after partial bytes exist and removes the
|
|
extraction directory, durable journal, and managed-install state. Four repeated focused runs and
|
|
the real SIGKILL recovery test passed. Signed GCS uploads use the earlier of signed-policy expiry
|
|
and a 15-minute cap, including their archive read stream, so slow valid uploads can finish while
|
|
stalled uploads remain bounded.
|
|
- Local and headless managed-skill operations now wait for the one startup transaction-recovery
|
|
promise before reading or changing install state. Codex uses its documented global
|
|
`~/.agents/skills` root, and provider removal derives allowed roots from the registry so aliases
|
|
remain removable after an agent is no longer detected. The combined focused suite passed 74
|
|
tests across 12 files, including fake-timer slow-upload and controlled-recovery regressions.
|
|
- The reported desktop install failure was a strict main-process IPC schema rejecting the
|
|
renderer's additive `providers` selection before bundle verification. All four install schemas
|
|
now accept the bounded field, and focused schema/provider tests pass. The original production
|
|
link resolves as a valid one-skill bundle and returns a fresh same-version local download grant;
|
|
the signed URL and private metadata were not logged or printed during verification.
|
|
- The final reliability hardening at `607e31dd04` adds a 60-second Cloud request deadline;
|
|
cancellable, journaled bundle extraction; bounded package creation, verification, and preview
|
|
fanout; atomic share-preparation admission and abandoned-archive cleanup; process-owned download
|
|
staging; SSH startup recovery; and additive paired-client cancellation-result negotiation. The
|
|
focused suite passed 78 ordinary tests plus a real process-death recovery test. Full Node, CLI,
|
|
and web typechecks, repository lint and reliability gates, changed-file formatting, and diff
|
|
checks passed. Mobile-facing wire changes remain additive, and no mobile app surface changed.
|
|
- A final performance and React lifecycle review found one stale-response race in managed-install
|
|
inventory: a slower previous machine could overwrite the newly selected machine's list. The
|
|
generation fence and regression test now preserve destination ownership; bundle busy state also
|
|
reaches the parent close guard in the initiating event instead of a mirror effect. The complete
|
|
renderer skill/settings slice passed 122 tests across 18 files, all Node/CLI/web typechecks,
|
|
focused Oxlint, changed-code quality, max-lines, diff, and localization gates.
|
|
- The final local readiness pass at `9fcd72e327` passed 489 skill-domain tests across 73 files
|
|
with 11 intentional platform skips, all Node/CLI/web typechecks, localization catalog,
|
|
extraction and coverage, max-lines, changed-code quality, React Doctor, formatting, and diff
|
|
checks. No new P0, P1, or P2 finding was proven by the crash/retry, security, performance,
|
|
functional, mobile-backcompat, or Windows/Linux review.
|
|
- Multi-select sharing now preserves hidden selections, reconciles changed discovery scans,
|
|
visibly explains ineligible skills, and blocks duplicate names before review. Exact complete
|
|
managed bundles publish a new immutable version to their existing package; ambiguous or partial
|
|
selections safely create a new package. Managed bundles with an active link can reopen the
|
|
destination-aware installer for another machine; the final renderer slice passed 114 tests.
|
|
- The mobile/backcompat review found no persisted mobile keys, routes, deep links, or required
|
|
legacy fields changed. Skill RPC methods and capabilities are additive and capability-gated;
|
|
the cross-platform review found production paths use host path APIs and platform checks, with
|
|
POSIX-only literals confined to tests or WSL guest execution.
|
|
- Final bearer-link changes pass 143 Orca Cloud API tests with one opt-in skip; 58 focused Orca
|
|
tests; four mixed-version wire tests; desktop/node/web typecheck; localization catalog,
|
|
extraction, and coverage; changed-code quality; max-lines; and diff checks.
|
|
- The final Cloud change passed PR run `31564069382` and merged-`main` run `31564235724`, including
|
|
the full monorepo build, lint, typecheck, tests, Terraform format, and Terraform validation.
|
|
- The opt-in desktop staging harness now publishes a bearer share without retired audience fields;
|
|
Node typecheck and Playwright test discovery pass without starting Orca or a browser login flow.
|
|
- Local Node and web typechecks, changed-code quality gates, 94 skill-domain files with 770 tests
|
|
passed and 3 skipped, 134 Orca Cloud API tests with one opt-in integration skip, the full Cloud
|
|
monorepo test/typecheck/lint/build gates, and isolated Terraform formatting and validation.
|
|
- Final Orca validation passed repository-wide lint, all Node/CLI/web typechecks, the production
|
|
desktop/native build, the Node 18 Relay bundle contract, 78 focused skill files with 557 tests
|
|
passed and 10 platform skips, and the mixed-version wire suite. The full repository run passed
|
|
49,977 tests with 112 skips; its three environment/timeout failures passed as a 124-test rerun
|
|
after removing Orca-injected Git config variables and rerunning the slow macOS PTY case.
|
|
- Skill sharing and installation renderer copy now passes the localization catalog, extraction,
|
|
and coverage gates without a max-lines exception.
|
|
- Remote upload sessions actively expire abandoned bytes after their bounded idle lifetime, and
|
|
begin/chunk/commit retries resume from the host-acknowledged offset under one stable transfer ID.
|
|
- Paired skill install and upload cancellation now reaches queued calls, capability probes,
|
|
one-shot sockets, cached request sockets, and shared-control requests instead of waiting for the
|
|
five-minute transfer timeout. Focused coverage proves queued work never starts, pending request
|
|
admission is released, late responses are ignored, one-shot sockets close, and unrelated cached
|
|
or shared-control requests survive; 84 transport/service tests and Node typecheck passed.
|
|
- Standalone and bundled package names reject Windows reserved device names in both Orca and Cloud,
|
|
preventing a package published on macOS/Linux from failing only when installed on Windows.
|
|
- Identical archives are deduplicated only within an owner tenant. PostgreSQL object identity and
|
|
tenant-hashed GCS keys prevent cross-tenant existence or finalization-timing disclosure.
|
|
- Native Windows package/install/recovery/copy-fallback tests and Node typecheck on `windows 2`;
|
|
the current slice passed 284 tests with 21 intentional platform skips across 43 files.
|
|
- The final combined physical `windows 2` run at `44d1266641` enabled native-Windows, real-process,
|
|
and Ubuntu 24.04 WSL coverage together: 67 files passed, 449 tests passed, and 17 intentional
|
|
platform skips remained. Commit `97b831dd17` made Windows recovery assertions path-semantic and
|
|
time-deterministic. Commit `44d1266641` fixed WSL alias reconciliation after proving native UNC
|
|
`lstat` can miss an existing distro symlink; WSL now inspects the alias in-distro and creates new
|
|
aliases with `ln -sT`. The checkout remained clean and no `orca-skill-*` directory remained in
|
|
WSL `/tmp`.
|
|
- Native Windows transaction validation passed all 21 cases at `6d3ce582aa`, including a real
|
|
canonical install beyond `MAX_PATH` while the host's `LongPathsEnabled` policy remained disabled.
|
|
- Real Ubuntu 24.04 WSL global, guest-workspace, and `/mnt/c` workspace transactions, including
|
|
alias placement, interrupted update recovery, conflict preservation, update, and removal.
|
|
- Real Ubuntu 24.04 WSL provider detection and POSIX semantics, including case-sensitive names,
|
|
`0600` regular files, and `0700` executable files.
|
|
- Exact portable package digest and archive SHA-256 goldens passed on macOS and native Windows
|
|
despite different bundled zlib versions (`1.2.12` and `1.3.1`).
|
|
- The focused deterministic package suite passed 26/26 tests in Debian Bullseye/glibc 2.31 on
|
|
native Linux ARM64 and emulated Linux x64, plus the real Ubuntu 24.04 WSL distro on `windows 2`;
|
|
every host produced the same package digest and archive SHA-256 golden.
|
|
- The same 26/26 portable package suite passed at `109272dab1` on a disposable native x86_64
|
|
Ubuntu 22.04 GCE host using Linux 6.8 and Node 24.18. The VM had no service account or scopes;
|
|
its boot disk, uploaded Git bundle, and temporary project SSH metadata were removed afterward.
|
|
- The exact x64 Electron directory package at `f1dccb4f42` passed its after-pack ABI scan for all
|
|
18 bundled native binaries, then loaded packaged `node-pty` and spawned `/bin/sh` inside an
|
|
Ubuntu 20.04/glibc 2.31 container. The physical run corrected the gate to use Linux's actual
|
|
`orca-ide` executable and `resources/node_modules` layout. A native ARM64 package built from
|
|
exact commit `abe92d565b` on an isolated `aarch64` GCE host then passed the same 18-binary
|
|
Ubuntu 20.04/glibc 2.31 ABI gate and packaged `node-pty` load/spawn smoke. The ARM64 VM had no
|
|
service account or scopes; its auto-delete boot disk was verified absent, and its local Git
|
|
bundle was moved to Trash after the clean-checkout proof.
|
|
- Real native Windows global, linked Git-worktree, and plain folder installs with spaces and
|
|
non-ASCII paths, plus privacy-safe install diagnostics and owner-private staging tests.
|
|
- Docker-backed SSH relay installation from the real Electron client passed global, remote Git
|
|
worktree, and remote plain-folder scopes, including client-mediated upload, unchanged preview,
|
|
managed-install listing, safe removal, and remote-target Cloud authorization.
|
|
- Real paired-runtime installation passed from an isolated Electron client to both a headed
|
|
desktop host and headless `orca serve` host. The host owned global and Git-worktree installs;
|
|
the headed host also owned a plain-folder install. The client's home remained untouched.
|
|
- A fresh post-resilience E2E run passed all three headed paired-runtime, headless `orca serve`,
|
|
and Docker SSH journeys. Focused failure injection also proves invalid gzip classification,
|
|
old-version preservation after `EACCES` and `ENOSPC`, bounded recovery from a lost final install
|
|
response, and validated structured SSH failure data without arbitrary error-data disclosure.
|
|
- Isolated staging bucket, IAM, `orca_skills` database and principal, enabled secret version, 11
|
|
log metrics, four alerts, and one dashboard in `onorca-cloud-staging`. The complete targeted
|
|
skill-infrastructure plan is zero-diff at Cloud `41ef335`.
|
|
- PostgreSQL migration startup is serialized by a transaction-scoped advisory lock. Transactional
|
|
DDL rollback and eight concurrent startup callers passed against ephemeral PostgreSQL 16 and 17,
|
|
with exactly one recorded schema version.
|
|
- Cloud PR `#349` merged as `6a812c5e11` after proving an older API migration runner preserves a
|
|
newer additive column/table and continues using its existing SQL. Build, lint, typecheck, tests,
|
|
Terraform initialization, and validation passed; no service or infrastructure was deployed.
|
|
- Cloud PR `#350` merged as `c22007384a` and added a required disposable PostgreSQL 16/17 drill.
|
|
Real old and future-additive Node processes coexist and write against one database, the database
|
|
is dumped and restored, and both processes write again after restoration. PR run `31624484826`
|
|
and merged-main run `31624717796` passed every code, Terraform, and database job; no staging or
|
|
production resource was accessed or deployed.
|
|
- The immutable API deploy path stamps every artifact and skill literal variable plus exactly one
|
|
approved skill-database secret, and rejects secret, Cloud SQL, service-account, scaling, CPU,
|
|
memory, volume, mount, probe, or unexpected-environment drift before traffic promotion.
|
|
Staging intentionally carries all four skill controls as `true`; production remains `false`.
|
|
- The route-disabled baseline, API revision `orca-cloud-api-staging-00039-rek`, first proved the
|
|
database-ready startup and anonymous `401`/`404` boundaries with zero revision errors.
|
|
- Cloud PR `#313` passed run `31533988351`, merged as `d0bf926`, and passed `main` run
|
|
`31534229437`. Guarded wake run `31534564230` restored exactly the two configured Relay cells.
|
|
- Auth deploy run `31535179937` promoted revision `orca-cloud-auth-staging-00017-dug` at 100%
|
|
traffic. Health, JWKS, exact GitHub OIDC claim constraints, and zero deployment-window errors
|
|
passed.
|
|
- The historical ACL-era API deploy run `31535438327` promoted revision
|
|
`orca-cloud-api-staging-00042-hef` at 100%
|
|
traffic with `authenticatedSmoke: true` and `skillSmoke: true`. The smoke covered artifact
|
|
lifecycle; skill upload/finalize/download; two immutable versions; recipient and outsider
|
|
authorization; local and remote grants; rollback selection; expiry; revocation; package
|
|
deletion; and signed-object cleanup.
|
|
- Cloud PR `#317` passed both required checks and merged as `be00db10`. Its historical ACL-era
|
|
deploy run `31546194596`
|
|
promoted revision `orca-cloud-api-staging-00048-xom` at 100% traffic with
|
|
`authenticatedSmoke: true` and `skillSmoke: true`; canonical health and the immutable image
|
|
digest independently matched after promotion.
|
|
- The signed-in macOS desktop staging journey reached upload, finalize, durable share creation,
|
|
and global install after replacing an invalid colon in the audience-derived idempotency key.
|
|
The retry test now requires a stable path-safe key, and the live test records the package ID
|
|
before publication so a failed share can still clean up its finalized package. Its update phase
|
|
uncovered same-name discovery ambiguity; the harness now selects the exact workspace source
|
|
directory instead of the first same-named global skill. A final full live rerun remains open.
|
|
- The serving API has all four controls `true`, zero revision errors, and privacy-safe structured
|
|
request logs. The log field inventory contains no principals, credentials, signed URLs, object
|
|
paths, or private contents; a sensitive-value scan returned zero matches.
|
|
- Cloud PR `#314` removed deploy-owned Auth release metadata from Terraform ownership, passed run
|
|
`31536141357`, merged as `4e91cf9`, and passed `main` run `31536329459`. The targeted Auth/API
|
|
plan then reported zero intended changes. Known SQL and artifact-bucket drift was excluded and
|
|
never applied.
|
|
- Cloud PR `#320` passed both required checks and merged as `0579cc1a71`. Targeted Terraform added
|
|
only `google_logging_project_exclusion.skill_share_bearer_request_urls` in staging: one addition,
|
|
zero changes, and zero deletions. This prevents per-link Cloud Run request URLs from entering
|
|
log storage while retaining route-template application telemetry.
|
|
- Guarded wake run `31564370807` prepared the reviewed staging topology. Deploy run `31564803943`
|
|
promoted `orca-cloud-api-staging-00051-yoq` at 100% traffic with immutable image digest
|
|
`sha256:511c0196511d2079bd9138092ad3cf065304b46a089b02d8df9318e0ae2e656a` and reported
|
|
`authenticatedSmoke: true` and `skillSmoke: true`.
|
|
- Candidate and canonical smoke produced 60 privacy-safe route-template events covering owner
|
|
upload/finalize/share creation/inventory/revocation and anonymous pinned/latest preview,
|
|
local/remote download grants, version selection, expiry, uniform unavailable responses,
|
|
package deletion, and object cleanup. Anonymous requests with no Authorization header and an
|
|
invalid header both returned the same `404 skill_share_not_found` response with `no-store`.
|
|
The serving revision had zero error logs and Cloud Logging retained zero per-link platform
|
|
request logs.
|
|
- Guarded sleep run `31546908228` stopped all three Relay cells after the physical staging work.
|
|
Independent GCP reads verified Cloud SQL policy `NEVER`, every MIG target at zero, and both
|
|
managed Cloud Run minimums at zero.
|
|
- Final guarded sleep run `31565009141` restored the same low-cost state after the bearer rollout;
|
|
independent reads found Cloud SQL `NEVER`/`STOPPED` and C1, C2, and C3 at target size zero.
|
|
- Cloud PR `#329` passed required checks, merged as `eddb144afe`, and passed merged-main run
|
|
`31569732482`. Browser-free desktop run `31569902499` then passed bundle publish v1, install,
|
|
local modification preservation, v2 update, rollback, revoke, installed-copy preservation, local
|
|
removal, and Cloud package deletion without opening a login page.
|
|
- Cloud PR `#330` passed required run `31578720429`, merged as `8045c85dad`, and passed merged-main
|
|
run `31578942857`. Guarded wake `31579195133` brought SQL and all three Terraform-owned cells up;
|
|
deploy `31579844413` promoted `orca-cloud-api-staging-00057-kat` at 100% traffic with immutable
|
|
digest `sha256:f61745b21d00b111087620ab1108c9a96e9863ec9e902a424aaad01e9e945605`.
|
|
- Recovery smoke `31580071168` published an isolated bundle, soft-deleted the exact published GCS
|
|
generation, restored it with `ifGenerationMatch=0`, verified immutable metadata, transactionally
|
|
repointed every matching database reference, verified the unlisted bearer download, and deleted
|
|
the probe. No ephemeral recovery job or live probe object remained.
|
|
- Guarded sleep `31580339694` returned staging to low cost. Independent reads verified Cloud SQL
|
|
`NEVER`/`STOPPED`, C1/C2/C3 target size zero and stable, and API/Auth min scale zero. Production
|
|
was not touched.
|
|
- Cloud PRs `#332` through `#335` added the staging-only 12-by-30 finalization load gate, narrowly
|
|
authorized its OIDC identity, fixed deterministic fixture ordering, and made retry settlement
|
|
cleanup-safe. Their merge commits were `ac85d0690e`, `53559bd644`, `7e1d50a84b`, and
|
|
`bb8bf8b9ac`; merged-main verification passed through run `31586525326`.
|
|
- Auth deploy `31584318896` promoted `orca-cloud-auth-staging-00021-tuq` with digest
|
|
`sha256:e17075d69dca36df427f02fa515481f359c8f67397c5ab16de9759f7f949c6be`; candidate and
|
|
canonical smoke passed with one 100%-traffic revision and no remaining candidate tag.
|
|
- Load run `31585710645` exercised 12 concurrent bundles with 30 skills and 3,949,317 extracted
|
|
bytes each. Two finalized immediately and ten returned explicit saturation; client p95 was
|
|
1,514 ms. Aggregate utilization stayed bounded: request p95 1,401.06 ms, API CPU 8.95%, API
|
|
memory 26.95%, one API instance, database CPU 10.89%, database memory 25.59%, and seven
|
|
connections. A saved, exact one-add Terraform plan restored the declared
|
|
`roles/monitoring.viewer` binding for the staging deploy identity before those aggregate metrics
|
|
were read; it changed no service, traffic, SQL, storage, Relay, or production resource.
|
|
- Cleanup run `31586684354` removed the exact failed-wave package set through normal package DELETE
|
|
routes. The two remaining quarantine archives were manifest-proven as 30-skill fixtures for
|
|
suffix `013756ec4740` and deleted with exact GCS generation preconditions; no live object from
|
|
that run window remained. GCS soft delete keeps the operation recoverable.
|
|
- Guarded sleep `31587083752` returned staging to low cost. Independent reads verified Cloud SQL
|
|
`NEVER`/`STOPPED`, C1/C2/C3 target size zero and stable with no current actions, and API, Auth,
|
|
and Relay active-revision minimums at zero. Production was not touched.
|
|
- Cloud PR `#336` added a browser-free physical-host credential handoff restricted to the exact
|
|
`main`-branch staging workflow identity. It encrypts only the ten-minute owner token to a
|
|
one-time RSA-3072 key, grants no GCP permissions, retains ciphertext for at most one day, and
|
|
passed PR run `31588982191` plus merged-main run `31589194501` as merge `8fce3298ef`.
|
|
- Guarded wake `31589384191` restored SQL and the two configured Relay cells without waking C3.
|
|
Auth deploy `31589963244` promoted `orca-cloud-auth-staging-00025-zuz` at 100% traffic with
|
|
immutable digest `sha256:2b5cb04060a871f372298786dbed681054a076f5cf75966ea5e2130403db7254`.
|
|
- The physical `windows 2` staging journey passed in 27.6 seconds using credential run
|
|
`31591275227`. It installed v1 into the Windows-owned global path with the published digest and
|
|
no macOS fallback, updated only that host to v2, preserved independent local version selection,
|
|
rolled Windows back to v1, proved revocation left its installed copy intact, removed both host
|
|
and local installs, and deleted the Cloud package. The encrypted artifact and local one-time key
|
|
material were deleted immediately after use.
|
|
- The staging skill bucket independently reports the exact age-one-day Delete lifecycle restricted
|
|
to `uploads/`, seven-day soft deletion, uniform bucket access, and public-access prevention. Its
|
|
oldest live quarantine object was created at `2026-08-11T22:49:34Z`, so lifecycle execution—not
|
|
configuration—is still time-gated.
|
|
- Guarded sleep `31592709817` completed at Cloud `8fce3298ef`. Independent reads verified SQL
|
|
`NEVER`/`STOPPED`, all three Relay MIGs stable at target zero with no active actions, and API,
|
|
Auth, and Relay active-service minimums at zero.
|
|
- Real process-death recovery now kills the transaction process after partial extraction and
|
|
immediately before and after every durable install/removal journal transition. All 17 macOS
|
|
cases passed, including extraction cleanup, dead-lock reclamation, receipt/filesystem agreement,
|
|
and absence of transaction debris; the release workflow requires the same suite on macOS,
|
|
native Windows, and Ubuntu 20.04/glibc 2.31.
|
|
- Guarded wake `31603249983` restored only the two configured staging cells. A disposable
|
|
no-service-account Ubuntu 20.04/glibc 2.31 VM then passed the browser-free SSH staging lifecycle
|
|
in 31.3 seconds: publish v1, host-owned install with exact digest, v2 update, managed-install
|
|
verification, rollback, revocation with installed-copy preservation, local removal, and Cloud
|
|
package deletion. The remote install, Orca SSH target, encrypted credential artifact, one-time
|
|
keys, and VM were removed. Guarded sleep `31604391897` passed; independent reads verified SQL
|
|
`NEVER`/`STOPPED` and C1/C2/C3 target zero, stable, and reached. Production was untouched.
|
|
- Guarded wake `31634214856` restored the two configured cells at Cloud `dfb8359ff5`. An isolated
|
|
native `Darwin arm64` OpenSSH target with a separate temporary home then passed the full staging
|
|
lifecycle in 20.1 seconds: publish v1, SSH-owned install, v2 update, managed-version checks,
|
|
rollback, revocation with installed-copy preservation, removal, and Cloud package deletion.
|
|
This corrected the staging oracle to accept absolute POSIX homes outside `/home`. The GitHub
|
|
ciphertext artifact was deleted immediately; the SSH service, relay, install, temporary home,
|
|
and one-time keys were removed. Guarded sleep `31635145830` passed; independent reads verified
|
|
SQL `NEVER`/`STOPPED`, all three MIGs stable and reached at zero with no active actions, and
|
|
API/Auth/Relay minimum scale zero. Production was untouched.
|
|
- Guarded wake `31605729090` restored the same configured topology. An isolated headless Orca host
|
|
with a separate home/profile then passed the full paired-runtime staging lifecycle in 12.5
|
|
seconds, proving host-owned install, update, managed-install state, rollback, revocation
|
|
preservation, removal, and Cloud deletion without local fallback. The paired environment,
|
|
install, package, encrypted credential artifact, and one-time keys were removed. Guarded sleep
|
|
`31606600532` passed; independent reads again verified SQL `NEVER`/`STOPPED` and all MIGs at
|
|
stable, reached target zero.
|
|
- Guarded wake retry `31630802215` succeeded at Cloud `dfb8359ff5`; the additional physical WSL
|
|
Cloud journey was then waived as duplicate release evidence. The first guarded sleep attempt
|
|
`31631288043` failed closed during Terraform provider initialization on a transient upstream
|
|
`503`, before the mutation step. Retry `31631379891` succeeded. Independent reads verified SQL
|
|
`NEVER`/`STOPPED`, all three MIGs stable and reached at target zero with no active actions, and
|
|
the API, Auth, and Relay active-revision minimums at zero. Production was untouched.
|
|
- Cloud PR `#355` removed internal publisher and organization identifiers from anonymous skill
|
|
responses, passed every code, Terraform, and PostgreSQL 16/17 check, and merged as
|
|
`b3213bd34d1b224d8a3b11527eceaac883965400`. Guarded wake `31639920301` prepared staging. Deploy
|
|
`31640677572` promoted `orca-cloud-api-staging-00060-qay` at 100% traffic with immutable digest
|
|
`sha256:31cb0a91a7abf1f82e4de08bd31e98fbd71519adc731a005fc95f60480658f73`; authenticated and skill
|
|
candidate/canonical smoke passed. The unrelated post-promotion storage-monitor image update
|
|
lacked `iam.serviceAccounts.actAs`; the unchanged prior monitor image remains serving, and the
|
|
API promotion and verification completed successfully. Guarded sleep `31640935616` passed in
|
|
8m51s. Independent reads verified SQL `NEVER`/`STOPPED`, C1/C2/C3 stable and reached at target
|
|
zero, and the API at minimum scale zero with revision `00060-qay` retaining 100% traffic.
|
|
Production was untouched.
|
|
|
|
Rollout gate: staging infrastructure, OIDC owner identity exchange, anonymous bearer lifecycle,
|
|
owner management, browser-free desktop bundle lifecycle, privacy-safe logging, published-object
|
|
recovery, bounded finalization load, and guarded rollback-capable deployment passed. Production
|
|
infrastructure and the unlisted-link API are live with all four controls enabled after successful
|
|
authenticated candidate and canonical lifecycle smoke. Native Windows, real Ubuntu 24.04 WSL
|
|
filesystems, physical Ubuntu 20.04 and
|
|
macOS ARM64 SSH, and paired non-Windows staging passed. On 2026-08-12, the owner accepted the
|
|
remaining live WSL-to-staging journey as duplicate evidence after the combined 449-test physical
|
|
Windows/WSL run and native-Windows staging lifecycle; this does not treat WSL semantics as
|
|
identical to macOS. The user-driven signed-in desktop and real-host production journey, supported
|
|
Windows SSH, and the quarantine lifecycle deletion remain. The shared staging data plane is asleep.
|
|
|
|
This checklist turns the architecture plan into ordered implementation and release work. A checked
|
|
item means evidence exists in code, tests, reviewed infrastructure, or release documentation; it
|
|
does not mean the surrounding phase is complete.
|
|
|
|
## Definition of done
|
|
|
|
- [x] A user can select one or many private local skills, publish one immutable Skill Bundle, and
|
|
receive one durable Orca share URL.
|
|
- [x] Anyone with an active unlisted link can inspect a bundle without signing in, choose all or a
|
|
subset of its skills, and install them globally or into a Git worktree or plain folder
|
|
workspace.
|
|
- [x] Installation works on local macOS, Linux, native Windows, WSL, paired Orca runtimes, and
|
|
supported SSH targets.
|
|
- [x] The portable archive root conforms to Agent Plugins 1.0.0 for skills-only packages and keeps
|
|
Orca integrity metadata in `dev.orca.skill-sharing/manifest.json`.
|
|
- [x] One canonical `.agents/skills/<skill-name>` copy is installed for each selected skill;
|
|
provider-specific placements are reconciled for explicitly selected agents, defaulting to
|
|
detected agents when no selection is supplied.
|
|
- [x] Install, update, rollback, and removal preserve modified or unowned local content unless the
|
|
user explicitly approves replacement.
|
|
- [x] Package ingestion rejects unsafe archives before any destination mutation.
|
|
- [x] Interrupted operations recover to a complete previous or requested version.
|
|
- [x] Private package bytes remain access-controlled, published versions persist until deletion,
|
|
and incomplete uploads expire automatically.
|
|
- [x] Mixed-version clients and remote hosts fail safely through capability negotiation.
|
|
- [x] Cloud resources are Terraform-owned, monitored, recoverable, and protected by independent
|
|
upload, download, and remote-install kill switches. Targeted Terraform is zero-diff; staged
|
|
generation recovery passed; dashboards, alerts, and runbooks cover the data plane; and Cloud
|
|
PR `#342` proves all three mutation controls can be disabled independently while unlisted
|
|
preview remains available.
|
|
- [x] The existing Skills page supports multi-select sharing, selective installation, per-skill
|
|
conflicts/results, and installed-bundle management; Settings → Share Skills provides the
|
|
authenticated owner inventory for copying and revoking active links.
|
|
|
|
## 0. Confirm scope and ownership
|
|
|
|
### Product and legal decisions
|
|
|
|
- [x] Record `vercel-labs/skills` as a behavioral reference only.
|
|
- [x] Record upstream baseline commit `c6f69c631292444cc541ac6d91e2226b0ff247da`.
|
|
- [x] Decide not to copy upstream source, tests, fixtures, registry data, or path tables.
|
|
- [x] Decide Orca will not depend on the upstream CLI or an unsupported programmatic API.
|
|
- [x] Decide V1 accepts Orca package sources only; Git, npm, and community registries remain with
|
|
existing tools.
|
|
- [x] Decide every Skill Bundle share is unlisted and reachable only through its durable link; do
|
|
not add search, browsing, organization-library, marketplace, or contained-skill indexes.
|
|
- [x] Record Agent Plugins 1.0.0 commit `bd383552095128f6effe895b9257cfd580a6d179`
|
|
as the portable-format reference.
|
|
- [x] Decide to implement from the specification without copying its CC BY prose or vendoring its
|
|
Apache-licensed schemas.
|
|
- [x] Treat the archive as a Skill Bundle, not an Orca plugin product or executable plugin runtime.
|
|
- [x] Limit V1 bundles to skills; exclude MCP servers, hooks, processes, connectors, and
|
|
permissions.
|
|
- [ ] Review the architecture decision record covering the reference-only boundary with
|
|
engineering and legal owners.
|
|
- [x] Add a review check that flags any proposed copied or mechanically translated upstream
|
|
material so attribution and licensing can be reconsidered before merge.
|
|
- [ ] Assign desktop, runtime, Cloud API, Terraform, security, design, and release owners.
|
|
- [ ] Confirm the first release ends after WSL and SSH support; keep team reconciliation as a later
|
|
product milestone.
|
|
|
|
### Product semantics
|
|
|
|
- [x] Confirm private means unlisted and protected by an unpredictable revocable bearer link, not
|
|
end-to-end encryption from Orca Cloud operators.
|
|
- [x] Confirm a published immutable version persists until package or version deletion; it has no
|
|
age-based object expiry.
|
|
- [x] Confirm an unfinished upload grant expires after 15 minutes and its quarantine object is
|
|
deleted after one day.
|
|
- [x] Confirm a durable share URL contains a bearer credential for a revocable authorization
|
|
record, not a GCS object or permanent blob grant.
|
|
- [x] Confirm a signed download grant lasts five minutes and is the maximum share-revocation lag.
|
|
- [x] Confirm updates create immutable versions and never mutate existing package objects.
|
|
- [x] Confirm rollback installs a selected prior immutable version.
|
|
- [x] Confirm revoking or deleting a Cloud share does not silently remove existing local installs.
|
|
- [x] Confirm sharing and updating use an artifact-like flow—preview, upload, unlisted durable
|
|
link, update, revoke/delete—while retaining skill-specific version, trust, and install
|
|
semantics.
|
|
- [x] Confirm recipients do not sign in; publishing and managing owned links still require sign-in.
|
|
- [x] Confirm revocation blocks future resolution/download grants but does not remove installed
|
|
copies.
|
|
- [x] Add a Settings section named **Share Skills**, parallel to **Artifacts**, without adding any
|
|
index or discoverability surface.
|
|
- [x] Treat the authenticated owner-only active-link inventory as management, not recipient
|
|
discoverability; never expose it anonymously or through browse/search APIs.
|
|
- [x] Confirm V1 has no checked-in workspace desired-state lockfile and no automatic fleet-wide
|
|
installation.
|
|
- [x] Confirm one skill is a one-item bundle and a bundle may contain large selections such as 30
|
|
skills behind one durable link.
|
|
- [x] Keep bundle identity, access, versions, transport, update/rollback, revocation, and deletion
|
|
at bundle scope.
|
|
- [x] Keep installation selection, conflicts, provenance, modification protection, and outcomes at
|
|
skill scope.
|
|
- [x] Keep loose-skill installation as the universal/default path and treat provider-native plugin
|
|
adapters as optional compatibility outputs.
|
|
|
|
### Existing-code and provider research
|
|
|
|
- [x] Inventory current skill discovery, `observeSkillPackage`, package identity, topology, and
|
|
freshness code; record reusable contracts and missing behavior.
|
|
- [x] Inventory plugin staging, provenance, lock serialization, and Windows rename retry designs;
|
|
extract only primitives that both domains can name and test accurately.
|
|
- [x] Inventory current desktop IPC and remote skill RPC registration.
|
|
- [x] Inventory existing SSH execution and file-transfer providers and identify the host-side
|
|
installer entry point.
|
|
- [x] Research official documentation for every initially supported agent's global and project
|
|
skill directories.
|
|
- [ ] Verify each provider path with a real installation on every supported platform.
|
|
- [x] Record whether each provider reads `.agents/skills` directly, how it is detected, and which
|
|
alias mechanisms it supports.
|
|
- [x] Add a normal reviewed maintenance process for provider registry changes; do not create an
|
|
upstream synchronization job.
|
|
|
|
## 1. Define package and install contracts
|
|
|
|
### Bundle contract replacement
|
|
|
|
- [x] Replace the unpublished single-skill envelope with root `plugin.json`, `skills/<name>/`, and
|
|
`dev.orca.skill-sharing/manifest.json`; do not add an outer `bundle/` directory.
|
|
- [x] Define `SkillBundleManifestV1` with stable package/version identity, bundle metadata, ordered
|
|
skill entries, per-skill identity and file lists, globally unique archive paths, and a bundle
|
|
digest.
|
|
- [x] Validate Agent Plugins 1.0.0 `plugin.json` fields from independently authored local rules;
|
|
never fetch a schema during loading.
|
|
- [x] Create fresh staging roots and reject unknown, malformed, or conflicting imported
|
|
`dev.orca.skill-sharing` namespaces without overwriting them. The extractor now exclusively
|
|
creates its staging root, preserves a pre-existing namespace on conflict, rejects unknown
|
|
top-level extension entries, and removes only staging it created.
|
|
- [x] Keep the detailed manifest inside the archive for export, remote/SSH transport, and offline
|
|
validation; keep GCS metadata compact and PostgreSQL limited to exact link/ownership lookup.
|
|
- [x] Add selected skill IDs and per-skill conflict choices to preview/install requests.
|
|
- [x] Return aggregate status plus ordered installed, unchanged, kept-local, and failed per-skill
|
|
outcomes; support retrying failed items only.
|
|
- [x] Add `skills.install.bundle.v1` and additive bundle RPC methods so mixed-version peers fail
|
|
before transfer.
|
|
- [x] Decide to dispose of the unpublished staging-only single-skill records before changing the
|
|
Cloud schema; there
|
|
is no production compatibility commitment to the unpublished single-skill format.
|
|
|
|
### Shared package manifest
|
|
|
|
- [x] Add `src/shared/skill-package-manifest.ts`.
|
|
- [x] Define the original single-skill `SkillPackageManifestV1` prototype with schema version,
|
|
stable package ID, immutable version ID, name, description, creation time, file identities,
|
|
and package digest.
|
|
- [x] Normalize manifest paths to `/` while keeping filesystem conversion host-owned.
|
|
- [x] Define the canonical digest algorithm over normalized paths, file identity, executable state,
|
|
and classification.
|
|
- [x] Require `skill/SKILL.md`, valid frontmatter, and agreement between skill and package names.
|
|
- [x] Specify deterministic serialization so identical inputs produce identical identities across
|
|
macOS, Linux, Windows, and WSL.
|
|
- [x] Version the schema and require additive changes or a new schema version.
|
|
- [x] Reject unknown schema versions with a stable error category.
|
|
|
|
### Package limits and file policy
|
|
|
|
- [x] Enforce maximum path depth 16.
|
|
- [x] Enforce maximum 2,048 archive entries.
|
|
- [x] Enforce maximum 512 regular files.
|
|
- [x] Enforce maximum 4 MiB per file.
|
|
- [x] Enforce maximum 32 MiB total extracted bytes.
|
|
- [x] Enforce maximum 40 MiB compressed bytes.
|
|
- [x] Reject absolute, parent-traversal, NUL-containing, and Windows drive-prefixed paths.
|
|
- [x] Reject duplicate normalized paths and Unicode or case-fold collisions.
|
|
- [x] Reject symlinks, hardlinks, devices, FIFOs, sockets, encrypted entries, and other special
|
|
files in V1.
|
|
- [x] Preserve executable modes represented by the package manifest.
|
|
- [x] Document that install never executes package scripts.
|
|
|
|
### Install request, preview, and result
|
|
|
|
- [x] Add `src/shared/skill-install-contract.ts`.
|
|
- [x] Define requests with operation ID, immutable package identity, ingress kind, destination, and
|
|
optional conflict resolution.
|
|
- [x] Support download-grant, staged-upload, and trusted in-process local-file ingress.
|
|
- [x] Ensure arbitrary remote RPC callers cannot supply a local filesystem path.
|
|
- [x] Model global, Git worktree, and folder-workspace destinations without assuming Git exists.
|
|
- [x] Define preview output for destination, current state, provider coverage, conflicts, and trust
|
|
metadata.
|
|
- [x] Define structured installed, updated, unchanged, conflict, partial, and failed results.
|
|
- [x] Define stable error categories for admission, transport, archive, filesystem, conflict,
|
|
recovery, provider placement, and compatibility failures.
|
|
- [x] Ensure responses never include grants, credentials, ACL membership, or private package
|
|
contents.
|
|
|
|
### Capability and wire compatibility
|
|
|
|
- [x] Add `src/shared/skill-install-capability.ts` with `skills.install.v1` and an update-required
|
|
compatibility message.
|
|
- [x] Read and apply `docs/reference/remote-wire-compatibility.md` before changing RPC contracts.
|
|
- [x] Add new methods without changing existing discovery behavior.
|
|
- [x] Keep new request and response fields optional until all supported peers understand them.
|
|
- [x] Do not add a terminal stream opcode for skill installation.
|
|
- [x] Define behavior for new client/old host, old client/new host, and capability loss during an
|
|
operation.
|
|
|
|
### Phase 1 contract gate
|
|
|
|
- [x] Review package, ingress, conflict, result, and capability contracts. Shared schema, runtime
|
|
method, Relay handler, ingress, planner, and stable-failure suites now form the release-gated
|
|
contract evidence; no existing discovery method or stream opcode changed.
|
|
- [x] Freeze stable V1 error categories used by desktop, runtime, SSH, and Cloud tests.
|
|
|
|
## 2. Build and validate packages
|
|
|
|
### Package creation
|
|
|
|
- [x] Add `src/main/skills/skill-package-creation.ts`.
|
|
- [x] Accept a specific skill directory rather than an arbitrary parent tree.
|
|
- [x] Observe and validate the source before staging.
|
|
- [x] Copy the source into an owner-private staging directory.
|
|
- [x] Observe the staged copy again and fail if its identity differs from the source snapshot.
|
|
- [x] Generate a deterministic tar archive with `manifest.json` and a `skill/` envelope.
|
|
- [x] Include only `skill/` contents in the eventual installed directory.
|
|
- [x] Bind the user-visible share preview to the final staged digest.
|
|
- [x] Clean staging files on success, cancellation, source drift, and error.
|
|
- [x] Accept a non-empty ordered selection of skill directories and support at least 30 within the
|
|
global entry/file/byte limits. Focused local creation/extraction now covers one 30-skill
|
|
archive; staging load run `31585710645` finalized the same maximum selection through Cloud.
|
|
- [x] Reject duplicate normalized skill names and preserve selection across search/filter changes
|
|
in the caller. The picker keeps hidden selections, unions explicit filtered selection, and
|
|
disables a second same-name source before review.
|
|
- [x] Generate deterministic `plugin.json`, `skills/`, and Orca extension metadata.
|
|
- [x] Bind the share review to every staged skill digest and the final bundle digest.
|
|
|
|
### Bounded extraction
|
|
|
|
- [x] Add `src/main/skills/skill-package-extraction.ts`.
|
|
- [x] Stream archive inspection and extraction without buffering the entire package.
|
|
- [x] Validate `manifest.json` before trusting archive file metadata.
|
|
- [x] Enforce compressed, extracted, entry, file, depth, and per-file limits during extraction,
|
|
not only after it.
|
|
- [x] Create extraction staging on the same filesystem as the canonical destination.
|
|
- [x] Convert manifest paths with the destination runtime's path APIs.
|
|
- [x] Re-observe extracted `skill/` and compare every file identity and package digest.
|
|
- [x] Delete partial extraction bytes on cancellation or failure.
|
|
- [x] Validate the portable root, Orca extension namespace, bundle manifest, and every selected
|
|
`skills/<name>` subtree before destination mutation.
|
|
- [x] Extract selected skill subtrees without requiring installation of unselected skills.
|
|
|
|
### Package tests
|
|
|
|
- [x] Test deterministic manifests, archives, and digests on macOS and native Windows. The exact
|
|
golden passed on both hosts at `8be7275d0d` after replacing zlib-dependent streaming output
|
|
with bounded deterministic stored DEFLATE blocks.
|
|
- [x] Repeat the portable package golden on native Linux and inside WSL.
|
|
The focused golden passed in Debian Bullseye/glibc 2.31 containers on native ARM64 and
|
|
emulated x64, and inside the real Ubuntu 24.04 WSL distro, at `92c8c6a4c6`. The same 26/26
|
|
suite passed at `109272dab1` on a disposable native x86_64 Ubuntu 22.04 GCE host; the VM,
|
|
boot disk, uploaded bundle, and temporary SSH metadata were removed after validation.
|
|
- [x] Test source changes during packaging.
|
|
- [x] Test CRLF/LF behavior explicitly and document whether byte identity changes.
|
|
- [x] Test executable-mode preservation and Windows's mode limitations.
|
|
- [x] Test missing, malformed, and identity-mismatched `SKILL.md` files.
|
|
- [x] Test every size, count, and depth boundary at limit, one below, and one above.
|
|
- [x] Test traversal, absolute paths, drive paths, Unicode/case collisions, duplicate paths, all
|
|
rejected link and special-file types, and encrypted entries.
|
|
- [x] Test truncated archives and invalid tar and content checksums.
|
|
- [x] Test invalid gzip bytes and map zlib-specific errors to the stable non-retryable archive
|
|
category.
|
|
- [x] Fuzz archive path normalization and envelope parsing with bounded resources.
|
|
|
|
### Phase 2 package gate
|
|
|
|
- [x] Prove invalid archive classes fail before destination mutation.
|
|
- [x] Prove the same source bytes produce the same digest on macOS, Linux, native Windows, and WSL.
|
|
- [x] Prove package creation and extraction require no `npx`, external Node installation, or
|
|
upstream CLI runtime.
|
|
|
|
## 3. Implement the local installer transaction
|
|
|
|
### Destination resolution
|
|
|
|
- [x] Add `src/main/skills/skill-install-destinations.ts`.
|
|
- [x] Resolve global canonical roots as `<host-home>/.agents/skills/<skill-name>` on the executing
|
|
host.
|
|
- [x] Resolve workspace canonical roots from runtime-owned worktree or folder-workspace identity.
|
|
- [x] Reject client-supplied remote paths that do not resolve to the selected workspace identity.
|
|
- [x] Resolve WSL home, paths, and target distro inside the selected distro.
|
|
- [x] Keep all path joins platform-native and reject destination escapes after realpath-aware
|
|
containment checks.
|
|
- [x] Support long Windows paths and case-insensitive destination collision checks.
|
|
|
|
### Admission, locking, and ingress
|
|
|
|
- [x] Add `src/main/skills/skill-package-download.ts`.
|
|
- [x] Add `src/main/skills/skill-install-service.ts`.
|
|
- [x] Validate request shape, schema, capability, package identity, scope, destination, and policy
|
|
before download or mutation.
|
|
- [x] Recover prior journals for the same destination before planning a new operation.
|
|
- [x] Acquire a filesystem-backed cross-process lock keyed by canonical destination.
|
|
- [x] Bound lock wait time and return a retryable busy result.
|
|
- [x] Stream ingress to an owner-private bounded temporary file and hash it while downloading.
|
|
- [x] Require HTTPS whenever the configured Cloud endpoint uses HTTPS.
|
|
- [x] Allow only configured Orca skill-bucket origins and reject credential-bearing cross-host
|
|
redirects.
|
|
- [x] Check expected compressed bytes, archive SHA-256, package digest, cancellation, grant expiry,
|
|
and disconnects.
|
|
- [x] Delete partial ingress bytes on every incomplete path.
|
|
|
|
### Planning and conflict handling
|
|
|
|
- [x] Add `src/main/skills/skill-install-planner.ts`.
|
|
- [x] Classify missing canonical destinations as installable.
|
|
- [x] Classify an identical requested digest as unchanged and continue placement repair.
|
|
- [x] Permit clean updates only when installed bytes still match Orca provenance.
|
|
- [x] Return a modified conflict when installed bytes drift from their receipt.
|
|
- [x] Return an unowned conflict when a destination exists without Orca provenance.
|
|
- [x] Return topology conflicts for files, external links, broken links, and name collisions.
|
|
- [x] Classify every requested provider placement independently.
|
|
- [x] Repeat current-state inspection immediately before commit and invalidate stale previews.
|
|
- [x] Require explicit confirmation before discarding local modifications or unowned content.
|
|
|
|
### Durable commit and recovery
|
|
|
|
- [x] Add `src/main/skills/skill-install-transaction.ts`.
|
|
- [x] Copy extracted bytes into a hidden sibling staging directory and verify the digest again.
|
|
- [x] Preserve executable modes where the host supports them.
|
|
- [x] Keep staging, replacement, and backup on the destination filesystem.
|
|
- [x] Write and durably flush a versioned transaction journal before moving the current
|
|
destination.
|
|
- [x] Move an approved existing destination to a journal-owned backup.
|
|
- [x] Rename verified staging into the canonical path.
|
|
- [x] Add bounded retries for Windows `EPERM`, `EACCES`, and `EBUSY` rename races caused by
|
|
antivirus or indexing.
|
|
- [x] Observe the committed destination and require the requested digest.
|
|
- [x] Restore the backup after failed commit and retain sufficient journal state after a crash.
|
|
- [x] Never remove a path based only on a filename pattern; require journal ownership,
|
|
containment, and expected identities.
|
|
- [x] Run bounded recovery at startup and before later operations for the destination.
|
|
Startup scans at most 64 install and 64 removal journals, bounds each read to 4 MiB,
|
|
validates the journal filename against the canonical-path state key, and recovers removal
|
|
before install under the destination lock. Dead-PID locks are reclaimed immediately after a
|
|
killed runtime; malformed locks retain the bounded stale-age safeguard. Corrupt or conflicting
|
|
journals are preserved and reported by path-free failure code for manual recovery.
|
|
|
|
### Provenance
|
|
|
|
- [x] Add `src/main/skills/skill-install-provenance.ts`.
|
|
- [x] Store versioned receipts outside installed skill directories.
|
|
- [x] Record package/version IDs, digest, scope, destination identity, canonical identity,
|
|
placements, previous version, timestamp, and runtime identity.
|
|
- [x] Exclude credentials, grants, share values, manifests, and package contents.
|
|
- [x] Serialize receipt updates across processes.
|
|
- [x] Write receipt updates through durable temporary-file replacement.
|
|
- [x] Support aggregate-index reconstruction from bounded per-install receipts.
|
|
- [x] Mark the journal complete only after receipt publication, then remove transaction backups and
|
|
staging.
|
|
|
|
### Verification and discovery
|
|
|
|
- [x] Re-run skill discovery on the destination after commit.
|
|
- [x] Verify the canonical skill and successful provider placements are observable.
|
|
- [x] Determine success from installed bytes and discovery, not process exit alone.
|
|
- [x] Invalidate renderer skill caches and refresh the Skills page.
|
|
- [x] Return canonical success with `partial` when an optional provider placement fails.
|
|
|
|
## 4. Implement provider placements
|
|
|
|
### Provider registry
|
|
|
|
- [x] Add `src/main/skills/skill-provider-destinations.ts`.
|
|
- [x] Add data-only records for Orca agent ID, canonical-root support, global/project resolvers,
|
|
detection evidence, and platform alias support.
|
|
- [x] Populate only provider paths independently verified from official documentation and real
|
|
installations.
|
|
- [x] Detect an agent before creating its provider-specific configuration root.
|
|
- [x] Avoid modifying roots for agents that consume `.agents/skills` directly.
|
|
- [x] Keep loose-skill placement as the universal/default installation path.
|
|
- [x] Do not add Cursor-specific placement in V1; keep the Agent Plugins-compatible root as the
|
|
portable archive shape while installing contained skills through canonical loose-skill paths.
|
|
- [x] Do not generate `.claude-plugin/plugin.json` or `.codex-plugin/plugin.json` adapters in V1;
|
|
native plugin installation remains a separately reviewed follow-up if it becomes useful.
|
|
- [x] Use loose skills for plugin clients, including the current Codex IDE extension, and retain
|
|
bundle/version provenance for every installed skill.
|
|
|
|
### Placement reconciliation
|
|
|
|
- [x] Add `src/main/skills/skill-placement-reconciliation.ts`.
|
|
- [x] Create relative directory aliases from real parent directories on POSIX.
|
|
- [x] Create directory junctions with absolute canonical targets on Windows.
|
|
- [x] Detect provider parents already linked to canonical storage.
|
|
- [x] Fall back to an independently copied and verified directory when aliases are unavailable or
|
|
denied and policy allows it.
|
|
- [x] Record each canonical copy, provider alias, junction, or independent-copy topology.
|
|
- [x] Reconcile placements idempotently after install and update.
|
|
- [x] Repair broken Orca-owned aliases.
|
|
- [x] Leave unowned or modified provider placements untouched unless explicitly replaced.
|
|
- [x] Preserve canonical success when a provider placement fails and make coverage retryable.
|
|
|
|
### Provider validation
|
|
|
|
- [ ] Confirm every initial provider discovers a global canonical or reconciled install.
|
|
- [ ] Confirm every initial provider discovers a workspace install only in that workspace.
|
|
- [x] Test symlink, junction, and copy fallback behavior after provider and canonical parent paths
|
|
are moved or linked.
|
|
- [ ] Test provider release upgrades against the registry through the normal review process.
|
|
|
|
## 5. Implement update, rollback, and removal
|
|
|
|
### Update and rollback
|
|
|
|
- [x] Resolve the latest accessible immutable Cloud version without mutating local state.
|
|
- [x] Compare the requested digest with provenance and observe current bytes before offering an
|
|
update.
|
|
- [x] Route clean updates through the same install transaction.
|
|
- [x] Offer keep-local, authorized publish-as-new-version, and explicit discard-and-replace choices
|
|
for modified installs.
|
|
- [x] Reconcile recorded aliases, junctions, and independent copies during updates.
|
|
- [x] Implement rollback as installation of a selected retained immutable version.
|
|
- [x] Never invoke `npx skills update` or write ownership metadata for the community CLI.
|
|
|
|
### Local removal
|
|
|
|
- [x] Observe the canonical destination and every receipt-owned placement before mutation.
|
|
- [x] Remove only aliases or junctions that still target the recorded canonical path.
|
|
- [x] Remove independent copies only when they match their receipt unless discard is explicit.
|
|
- [x] Remove the canonical copy only when Orca owns it, it is unmodified, and no retained receipt
|
|
depends on it.
|
|
- [x] Publish provenance changes durably before completing removal.
|
|
- [x] Leave changed or unowned paths intact and report exactly what remains.
|
|
|
|
### Recovery failure injection
|
|
|
|
- [x] Inject failure before and after every journal transition.
|
|
- [x] Verify partial downloads and extraction staging are deleted.
|
|
- [x] Verify a moved destination is restored from backup.
|
|
- [x] Verify a placed destination without a receipt is completed or restored according to journal
|
|
state.
|
|
- [x] Verify a published receipt with an incomplete journal is finalized safely.
|
|
- [x] Verify a restarted process discovers orphaned install and removal journals without a later
|
|
user operation. Deterministic startup tests prove a committed update publishes provenance and
|
|
cleans its dead lock, while an interrupted removal restores both bytes and receipt.
|
|
- [x] Verify interrupted placement reconciliation preserves the canonical install and retries.
|
|
- [x] Test cancellation during download, extraction, staging copy, commit, provenance, and
|
|
placement reconciliation.
|
|
|
|
## 6. Provision GCP infrastructure
|
|
|
|
### Environment and Terraform prerequisites
|
|
|
|
- [x] Inspect the active `onorca-cloud` project read-only and record the existing Cloud Run, GCS,
|
|
Cloud SQL, IAM, and enabled-service baseline.
|
|
- [x] Locate the authoritative Orca Cloud Terraform worktree, state, modules, and deployment
|
|
pipeline.
|
|
- [x] Confirm or create a separate staging GCP project before exercising new lifecycle and IAM
|
|
behavior.
|
|
- [x] Confirm production names and quotas, including availability of
|
|
`onorca-cloud-skill-packages`. A read-only 2026-08-12 check returned `404` for the global
|
|
bucket name, found no production `orca_skills` database or skill-database secret collision,
|
|
and confirmed the intended existing API service and runtime identity. Cloud Run exposes a
|
|
1,000-job regional quota and 180 job runs per minute, while V1 reuses the existing API at a
|
|
20-instance ceiling and existing Cloud SQL instance; no quota increase is required.
|
|
- [x] Confirm `US` storage satisfies initial residency requirements.
|
|
- [x] Confirm Cloud SQL connection and PostgreSQL user provisioning conventions.
|
|
- [x] Keep Firestore, Cloud Tasks, and new Pub/Sub dependencies out of V1.
|
|
- [x] Declare every durable resource and IAM binding in Terraform; do not provision them manually
|
|
with `gcloud`.
|
|
|
|
### Dedicated GCS bucket
|
|
|
|
- [x] Declare private bucket `onorca-cloud-skill-packages`, subject to Terraform validation.
|
|
- [x] Set location to `US` for parity with current artifact storage.
|
|
- [x] Enforce uniform bucket-level access and public-access prevention.
|
|
- [x] Configure seven-day soft delete.
|
|
- [x] Keep object versioning disabled and record object generations in PostgreSQL.
|
|
- [x] Add a one-day deletion lifecycle for `uploads/` quarantine objects only.
|
|
- [x] Add exact approved production and development Orca origins to CORS; never use `*`.
|
|
- [x] Allow only required signed POST upload and GET/HEAD download behavior and response headers.
|
|
- [x] Keep the bucket off public custom domains.
|
|
- [x] Define immutable final keys as
|
|
`packages/v1/tenants/<tenant-hash>/sha256/<prefix>/<archive-sha256>/package.tar.gz`, with the
|
|
logical package digest verified in object metadata and PostgreSQL.
|
|
- [x] Define tenant-bound random quarantine keys as `uploads/<upload-id>/package.tar.gz`.
|
|
|
|
### Database and secret
|
|
|
|
- [x] Declare database `orca_skills` on existing regional PostgreSQL 17 instance
|
|
`orca-cloud-auth-db`.
|
|
- [x] Declare dedicated principal `orca_skills_app` with access only to `orca_skills`.
|
|
- [x] Store its connection URL in Secret Manager as `orca-cloud-skills-database-url`.
|
|
- [x] Attach the existing Cloud SQL instance to `orca-cloud-api` without replacing the service.
|
|
- [x] Inject only the skill database secret into the API service.
|
|
- [x] Verify backups and point-in-time recovery cover the new database. `orca_skills` shares the
|
|
Terraform-managed Cloud SQL instance whose live staging and production settings both have
|
|
backups, replication-log archiving, seven retained backups, and seven-day PITR enabled.
|
|
|
|
### IAM
|
|
|
|
- [x] Grant `orca-cloud-api@onorca-cloud.iam.gserviceaccount.com` bucket-scoped
|
|
`roles/storage.objectUser`.
|
|
- [x] Grant the API service account `roles/cloudsql.client` for the existing instance.
|
|
- [x] Grant service-account-scoped IAM Credentials `signBlob` for self-signing V4 policies and
|
|
URLs.
|
|
- [x] Grant Secret Manager accessor only for skill-specific secrets.
|
|
- [x] Verify bucket IAM contains neither `allUsers` nor `allAuthenticatedUsers`.
|
|
- [x] Do not grant desktop, remote runtime, or end-user identities direct bucket IAM.
|
|
- [x] Do not create or distribute long-lived GCP service-account keys.
|
|
- [x] Keep deployment-account permissions unchanged except for reviewed Terraform management
|
|
requirements. Skill sharing adds no deployment-account IAM binding: immutable API and
|
|
monitor-image updates use its existing `roles/run.developer`, while storage inventory and
|
|
scheduling use separate least-privilege service accounts.
|
|
|
|
### Cloud Run configuration
|
|
|
|
- [x] Extend `orca-cloud-api` in `us-central1`; do not create a separate V1 worker service.
|
|
- [x] Configure bucket, 40 MiB compressed limit, 15-minute upload TTL, five-minute download TTL,
|
|
fixed finalize concurrency, and skill database URL.
|
|
- [x] Reuse existing auth base URL and application CORS configuration.
|
|
- [x] Stream validation with fixed buffers under the existing 512 MiB memory limit.
|
|
- [x] Add a small per-instance finalization semaphore and retryable `429` or `503` with
|
|
`Retry-After` when saturated.
|
|
- [x] Preserve current service scaling initially and tune only from measured CPU, latency,
|
|
database, and error data.
|
|
- [x] Define criteria for splitting finalization into a worker service if it harms existing API
|
|
traffic.
|
|
- [x] Make immutable API candidates atomically replace the complete Terraform-owned literal
|
|
environment and the exact `ORCA_SKILLS_DATABASE_URL` Secret Manager reference.
|
|
- [x] Reject serving or candidate drift in the runtime service account, Cloud SQL attachment,
|
|
scaling, CPU, memory, volumes, mounts, ports, and probes before moving traffic.
|
|
- [x] Keep all four skill controls explicit in both deploy workflows. Staging changed to `true`
|
|
only with the authenticated OIDC smoke gate; production remains `false`.
|
|
|
|
### Terraform review and apply
|
|
|
|
- [x] Format and validate Terraform.
|
|
- [x] Produce and review a staging plan.
|
|
- [x] Verify the plan does not replace the existing artifact bucket, Cloud SQL instance, Cloud Run
|
|
services, or unrelated IAM.
|
|
- [x] Apply to staging and capture resource and IAM verification evidence.
|
|
- [ ] Produce and review the production plan after staging gates pass.
|
|
- [ ] Apply the approved production plan only during the rollout phase.
|
|
- [ ] Verify production with read-only bucket, Cloud Run, database, IAM, lifecycle, and CORS
|
|
commands without printing secret payloads or signed values.
|
|
|
|
## 7. Implement Cloud metadata and APIs
|
|
|
|
### PostgreSQL migrations
|
|
|
|
- [x] Serialize concurrent Cloud Run startup migrations with a transaction-scoped PostgreSQL
|
|
advisory lock before migration-table inspection.
|
|
- [x] Prove failed DDL records no schema version and eight concurrent callers converge on one
|
|
version against real PostgreSQL 16 and 17.
|
|
- [x] Add `skill_packages` with owner organization, slug/name, creator, timestamps, and deletion
|
|
state.
|
|
- [x] Add immutable `skill_package_versions` with package and archive identities, GCS key and
|
|
generation, sizes, manifest, release notes, creator, and publication state.
|
|
- [x] Add tenant/user-bound `skill_package_uploads` with quarantine identity, expiry,
|
|
finalization state, and failure category.
|
|
- [x] Add `skill_package_acl` for organization and user principals and permissions.
|
|
- [x] Add unpredictable, revocable, optionally version-pinned `skill_share_records`.
|
|
- [x] Add bounded `skill_package_audit_events` without contents, filenames, or signed values.
|
|
- [x] Add unique package slug per organization, immutable version and digest constraints, and
|
|
tenant-scoped archive and final GCS key/generation constraints.
|
|
- [x] Add active-share, ACL-principal, and pending-upload expiration indexes. The ACL index remains
|
|
legacy storage and is not used for bearer resolution.
|
|
- [x] Add foreign keys preventing blob-reference deletion while a published version uses it.
|
|
- [x] Accept and stream-validate both the pre-release single-skill envelope and the new Agent
|
|
Plugins skills-only bundle envelope during the desktop migration.
|
|
- [x] Store the detailed bundle manifest in the existing immutable version record; expose it only
|
|
after exact-link bearer authorization or to owners.
|
|
- [x] Keep contained skills out of separate database rows and search indexes. Selective inspection
|
|
reads the validated manifest attached to the exact immutable version.
|
|
- [x] Keep detailed file identity in the in-archive manifest rather than duplicating it into GCS
|
|
custom metadata. Published-object metadata contains only aggregate archive/package digests
|
|
and immutable generation identity; per-file paths, sizes, modes, and hashes remain inside the
|
|
authorized archive manifest and immutable PostgreSQL version record.
|
|
- [x] Test forward migration, rollback strategy, backup restoration, and migration compatibility
|
|
during mixed API versions. Unit coverage proves atomic forward/idempotent migration, ignores
|
|
an additive schema version written by a newer API, and leaves no recorded or partial schema
|
|
after failure. PostgreSQL 16/17 integration coverage proves transactional DDL rollback and
|
|
eight concurrent startup callers converge on one version. Cloud PR `#349` additionally proves
|
|
the older runner and its existing SQL preserve and operate beside a simulated newer additive
|
|
column/table. Cloud PR `#350` requires real old/new Node-process coexistence, writes before
|
|
and after a `pg_dump`/`pg_restore`, and full cleanup on disposable PostgreSQL 16 and 17; both
|
|
PR and merged-main runs passed.
|
|
|
|
### Authorization and lifecycle model
|
|
|
|
- [x] Allow share resolution and share-scoped download grants without an authenticated principal.
|
|
- [x] Treat an unpredictable active, unexpired share ID as the bearer authorization; do not apply
|
|
legacy package ACLs to recipients.
|
|
- [x] Return the same non-disclosing `404` for missing, expired, revoked, or deleted shares.
|
|
- [x] Keep authenticated owner checks on upload, finalize, package/version management, share
|
|
creation, revocation, and deletion.
|
|
- [x] Apply distributed per-IP abuse limits to anonymous resolution and grant requests without
|
|
persisting raw requester addresses.
|
|
- [ ] Apply organization retention and legal deletion rules over product rollback retention.
|
|
- [x] Make package deletion revoke shares before dereferencing immutable objects.
|
|
- [x] Delete an object only after a transaction proves no retained version references it.
|
|
- [x] Design metadata/object reconciliation for partial publication and deletion failures.
|
|
|
|
### Upload and finalization APIs
|
|
|
|
- [x] Implement `POST /v1/skill-packages/uploads` with existing authentication, organization
|
|
membership, quota, rate, and concurrency checks.
|
|
- [x] Insert a single-use pending upload before issuing a grant.
|
|
- [x] Create a 15-minute V4 signed POST policy bound to exact key, content type, upload ID, expected
|
|
archive SHA-256 metadata, and 40 MiB length range.
|
|
- [x] Upload directly from the client to GCS without routing package bytes through Cloud Run.
|
|
- [x] Implement idempotent finalize by upload ID and manifest identity.
|
|
- [x] Validate GCS key, size, type, metadata, tenant, generation, and expiry before streaming.
|
|
- [x] Stream once to calculate archive SHA-256 and validate envelope, manifest, paths, limits, and
|
|
package digest.
|
|
- [x] Promote with an if-absent generation precondition to the tenant-scoped,
|
|
content-addressed final key.
|
|
- [x] If the tenant's final key exists, verify recorded identity without exposing cross-tenant
|
|
package existence.
|
|
- [x] Publish the version and complete the upload in a PostgreSQL transaction.
|
|
- [x] Delete quarantine bytes after success and rely on lifecycle cleanup for abandonment.
|
|
- [x] Make all mutating endpoints accept idempotency keys.
|
|
|
|
### Package, version, and share APIs
|
|
|
|
- [x] Implement package creation and version publication under a stable package identity.
|
|
- [x] Implement package details and paginated version history.
|
|
- [x] Stop accepting organization/selected-user audience fields for new bearer shares; retain
|
|
legacy ACL storage only as migration-compatible data.
|
|
- [x] Implement durable share creation with optional pinned version and expiry.
|
|
- [x] Implement anonymous bearer-link metadata preview.
|
|
- [x] Implement immediate share revocation for new grant requests.
|
|
- [x] Implement Cloud package/version deletion with retention and reference checks.
|
|
- [x] Implement version update lookup and rollback selection.
|
|
|
|
### Download grants
|
|
|
|
- [x] Implement anonymous `POST /v1/skill-shares/<share-id>/download-grants` after fresh active-link
|
|
evaluation.
|
|
- [x] Generate a five-minute V4 signed GET URL for the exact immutable key and stored generation.
|
|
- [x] Set only response content type and safe attachment filename overrides.
|
|
- [x] Grant no list or write capability.
|
|
- [x] Return expected archive identity and byte count beside the grant for runtime verification.
|
|
- [x] Test revocation immediately blocks new grants while already issued URLs expire within five
|
|
minutes.
|
|
|
|
### Cloud tests
|
|
|
|
- [x] Test anonymous latest/pinned preview and download grants without an Authorization header.
|
|
- [x] Test missing, expired, revoked, and deleted shares all fail without disclosure.
|
|
- [x] Test authenticated owner management remains protected.
|
|
- [x] Test anonymous per-IP rate limiting without recording raw IP addresses.
|
|
- [x] Test the authenticated owner-only active-link inventory and ensure responses are not cached.
|
|
- [x] Test expired, reused, wrong-tenant, wrong-key, wrong-size, and wrong-hash uploads.
|
|
- [x] Test malformed, oversized, and resource-exhausting archives during finalization.
|
|
- [x] Test finalization semaphore saturation and retry behavior.
|
|
- [x] Test concurrent idempotent mutations and partial database/GCS failures.
|
|
- [x] Test tenant-scoped deduplication without cross-tenant timing or response disclosure. Orca
|
|
Cloud `ddbd4e2` proves identical archives use distinct tenant-hashed GCS keys and independent
|
|
PostgreSQL object identities.
|
|
- [x] Test quota and rate limits.
|
|
- [x] Test durable shares resolving intended latest and pinned immutable versions.
|
|
- [x] Test update, rollback, revocation, deletion, soft-delete recovery, and orphan reconciliation.
|
|
|
|
## 8. Implement desktop Cloud client and UX
|
|
|
|
### Cloud client
|
|
|
|
- [x] Make share resolution and share-scoped download-grant calls anonymous while keeping upload,
|
|
package/version management, share creation, revocation, and deletion authenticated.
|
|
- [x] Keep desktop contracts storage-provider-neutral.
|
|
- [x] Implement bounded progress, cancellation, retry, and idempotency behavior.
|
|
- [x] Redact signed policies, URLs, credentials, private paths, and package contents at creation.
|
|
|
|
### Share experience
|
|
|
|
- [x] Read and apply `docs/STYLEGUIDE.md`; use canonical CSS tokens and shadcn primitives.
|
|
- [x] Add **Share skill** to eligible installed and workspace skills.
|
|
- [x] Show name, description, author, file count, total size, scripts, executable files, and the
|
|
unlisted-link warning before upload.
|
|
- [x] Remove organization and selected-person audience controls from bearer-link publishing.
|
|
- [x] Accept optional release label and notes.
|
|
- [x] Package the exact previewed bytes and invalidate preview after source drift.
|
|
- [x] Show bounded upload and finalization progress with cancellation.
|
|
- [x] Return a copyable durable Orca URL after publication.
|
|
- [x] Remove access editing from the bearer-share workflow; keep version publishing, revoke, and
|
|
package deletion actions.
|
|
- [x] Make clear that unsharing blocks future installs but does not remove installed copies.
|
|
- [x] Add **Share skills**, **Install from link**, and installed-package **Manage** to the existing
|
|
Skills page header; expose active link copy/revocation in Settings → **Share Skills** so links
|
|
remain manageable even when the source was never a managed install.
|
|
- [x] Add selection mode whose selection survives search/filter changes and an explicit **Select
|
|
all results** action; never select all implicitly.
|
|
- [x] Keep the per-card share action as a one-skill bundle shortcut.
|
|
- [x] Disable ineligible skills with visible, screen-reader-linked reasons and block duplicate
|
|
skill names before review.
|
|
- [x] Review bundle name, skill/file/byte counts, script/executable warnings, expandable per-skill
|
|
details, unlisted-link behavior, and release notes.
|
|
- [x] Add Settings → **Share Skills** with artifact-like explanation and a route to the Skills page.
|
|
- [x] Show named preparation, upload, verification, and link-publication progress and return one
|
|
durable link for the bundle. Preparation uses **Preparing preview…**; publication advances
|
|
through **Uploading…**, **Verifying package…**, and **Publishing link…** before rendering the
|
|
single durable share URL. Cancellation reaches both upload and link publication.
|
|
|
|
### Install experience
|
|
|
|
- [x] Show description, version, digest, file summary, scripts, and executable files without
|
|
exposing internal publisher or organization identifiers.
|
|
- [x] Treat the package as code from its author and require an explicit install action.
|
|
- [x] Show current-machine global installation as the default.
|
|
- [x] Allow selection of connected machine, Git worktree, or plain folder workspace.
|
|
- [x] Show detected-agent coverage and canonical/provider topology before commit.
|
|
- [x] Show installed-state conflicts and explicit resolution choices.
|
|
- [x] Show phase progress without exposing grants or local private paths.
|
|
- [x] Render installed, unchanged, updated, partial, conflict, unsupported, cancelled, and failed
|
|
results with actionable recovery.
|
|
- [x] Add incomplete-coverage retry.
|
|
- [x] Open deep links in inspection mode without starting installation.
|
|
- [x] Show immutable version, skill count, scripts/executables, and release notes before selection;
|
|
V1 omits publisher identity from the public response and recipient UI.
|
|
- [x] Let the recipient select all or a subset, then choose local, paired runtime, WSL, or SSH and
|
|
global or workspace scope.
|
|
- [x] Preview new, unchanged, update, and conflict counts and resolve all per-skill conflicts in one
|
|
surface with **Keep local** as the default.
|
|
- [x] Label the primary action **Install N skills** and show aggregate progress plus current skill.
|
|
The destination-owned installer emits the current name and one-based bundle position. Local
|
|
installs forward it directly; paired and SSH hosts expose a capability-gated read-only
|
|
progress method, with phase-only fallback for mixed-version older hosts.
|
|
- [x] Group results into installed, unchanged, kept local, and failed; retry failed items only.
|
|
|
|
### Skills page lifecycle
|
|
|
|
- [x] Show installed package/version identity and update availability.
|
|
- [x] Offer clean update, modified-copy choices, prior-version rollback, and safe local removal.
|
|
- [x] Show whether a package came from Orca Cloud and its accessible version history.
|
|
- [x] Refresh discovery and installation state after local or remote actions.
|
|
- [x] Keep Cloud deletion, share revocation, and local removal clearly separate.
|
|
- [x] Add installed-bundle update, rollback, install-on-another-machine, inspect, and remove actions.
|
|
An active unlisted link opens the existing destination-aware installer for another machine.
|
|
- [x] Add shared-bundle copy-link, access, revoke, publish-version, and Cloud-delete actions. Exact
|
|
full-bundle version publishing reuses its package; ambiguous or partial managed-bundle
|
|
selections create a new package rather than mutating the wrong history.
|
|
- [x] Protect locally modified skills during bundle update and removal, including when only part of
|
|
a bundle remains managed. Keep-local is the default and destructive replacement is explicit.
|
|
|
|
### UX validation
|
|
|
|
- [x] Test keyboard shortcuts and labels with platform-aware macOS versus Windows/Linux behavior.
|
|
Skill sharing adds no modifier shortcut or shortcut label. Renderer coverage proves its
|
|
platform-neutral Escape navigation closes the page, leaves editable controls alone, and
|
|
remains owned by open dialogs; the compatibility scan found no hardcoded Meta-only binding,
|
|
macOS glyph, or platform-specific accelerator in the feature.
|
|
- [x] Test loading, error, cancellation, partial, conflict, and stale-preview states. Renderer
|
|
coverage includes scan loading, unavailable links, upload/install cancellation, partial
|
|
provider results, keep-local conflicts, capability loss after preview, and selection
|
|
reconciliation after a changed discovery scan; package tests cover source drift.
|
|
- [x] Test screen-reader names, focus order, progress announcements, and destructive confirmations.
|
|
The link field receives initial focus, Tab reaches the enabled primary action, Escape closes
|
|
the dialog, and machine, destination, WSL, and workspace selectors have programmatic names.
|
|
Upload progress exposes its phase and numeric value from 0 through publication; dialog-level
|
|
install tests announce authorization, installation, and current-skill position. Link revoke,
|
|
Cloud deletion, and local removal retain focus while switching to exact confirmation names.
|
|
- [x] Test long names, release notes, paths, organization names, and localized copy. Renderer
|
|
coverage exercises the 64-character bundle/skill-name boundary, a 10,000-character multiline
|
|
release note, long Unicode descriptions and organization IDs, long Windows-style skill paths,
|
|
and long workspace labels. Review copy wraps without losing full values, selectors constrain
|
|
labels to dialog width, and localization catalog, extraction, and coverage gates pass.
|
|
- [ ] Review trust and privacy wording with security and design.
|
|
|
|
## 9. Implement paired runtime installation
|
|
|
|
### Runtime and IPC surface
|
|
|
|
- [x] Register preview, install, update, and remove through runtime RPC and desktop IPC.
|
|
- [x] Add bounded `beginUpload`, `uploadChunk`, `commitUpload`, and `cancelUpload` methods.
|
|
- [x] Route every request to the runtime that owns the selected host and workspace.
|
|
- [x] Keep transfer separate from installation so grants, relayed chunks, and local files converge
|
|
at the validated ingress boundary.
|
|
- [x] Make upload sessions bounded by count, total bytes, idle lifetime, and chunk size.
|
|
- [x] Require monotonic offsets and idempotent acknowledged-chunk retry or full restart. A stable
|
|
transfer ID and host-acknowledged offset resume a lost begin response or interrupted upload.
|
|
- [x] Release staging bytes after cancellation, disconnect, timeout, and runtime restart. Active
|
|
idle timers remove abandoned archives even when no later upload arrives.
|
|
|
|
### Direct and client-mediated transfer
|
|
|
|
- [x] Prefer destination-runtime direct download when it can reach approved Orca Cloud storage.
|
|
- [x] Verify origin, redirects, generation, byte count, archive hash, and package digest on the
|
|
destination runtime.
|
|
- [x] Fall back to authenticated client-mediated chunk transfer when the host cannot reach GCS.
|
|
- [x] Never pass the desktop's local path as a remote package source.
|
|
- [x] Preserve the same inspection, transaction, provenance, and result behavior for both
|
|
transports.
|
|
- [x] Retry an idempotent install after a recoverable lost final response; rebuild a staged
|
|
transfer before retrying so a consumed upload is never reused.
|
|
- [x] Run the real Electron client against a paired desktop host for global, Git-worktree, and
|
|
plain-folder install, unchanged preview, inventory, and removal.
|
|
- [x] Run the same contract against a paired headless `orca serve` host for global and
|
|
Git-worktree install, unchanged preview, inventory, and removal.
|
|
- [x] Verify paired installation creates files only in host-owned roots and never falls back to the
|
|
client's isolated home.
|
|
- [ ] Test connection loss and resumption or restart behavior at every transfer boundary. Lost
|
|
final install-response convergence is covered for direct and staged paired-runtime paths;
|
|
deterministic cancellation now settles in-flight and queued paired calls across every
|
|
transport without leaking request admission or disrupting peers. Client-mediated transfer
|
|
also cancels and cleans a fully uploaded session when cancellation interrupts the commit RPC.
|
|
Restart and the remaining physical disconnect boundaries are still open.
|
|
|
|
### Mixed versions
|
|
|
|
- [x] Advertise additive bundle installation separately on paired and SSH hosts; never send the
|
|
bundle method to an older peer that lacks `skills.install.bundle.v1`.
|
|
- [x] Hide or disable remote install when `skills.install.v1` is absent.
|
|
- [x] Show a specific host-update-required message instead of attempting the RPC.
|
|
- [x] Test new client/old server and old client/new server.
|
|
- [x] Test optional-field omission in both directions.
|
|
- [x] Test a capability changing after preview but before execution.
|
|
- [x] Confirm older servers retain skill discovery and ignore no unknown stream opcode because none
|
|
is introduced.
|
|
|
|
## 10. Validate native Windows and WSL on `windows 2`
|
|
|
|
The connected Orca environment `windows 2` was reachable on 2026-08-11 and ran Orca `1.4.180` with
|
|
runtime ID `68b5e70d-baaf-40a5-b384-be09cc088880`. Validation used the isolated checkout
|
|
`C:\Users\neil\orca\skills-share-validation` and WSL distro `Ubuntu-24.04`; no production skill
|
|
directory was used for destructive failure injection.
|
|
|
|
The final combined run used workspace `skills-share-staging-validation` at
|
|
`C:\Users\neil\orca\workspaces\orca\skills-share-staging-validation` on branch
|
|
`OrcaWin/skills-share-staging-validation`. At `44d1266641`, native-Windows, real-process, and real
|
|
WSL coverage ran together: 67 files passed, 449 tests passed, and 17 intentional platform skips
|
|
remained. The Windows checkout was clean afterward, and WSL `/tmp` contained no remaining
|
|
`orca-skill-*` directory.
|
|
|
|
The 2026-08-11 host inventory recorded Windows 11 Pro `10.0.26200` build `26200`, x64, healthy
|
|
NTFS, Windows Defender, `LongPathsEnabled=0`, no Developer Mode registry grant, and an expected
|
|
`UnauthorizedAccessException` for an unprivileged directory-symlink probe. The current user home
|
|
is `C:\Users\neil` and the temp root is under that profile. WSL `2.7.11.0` uses kernel
|
|
`6.18.33.2-microsoft-standard-WSL2`; its only installed distro is the running default
|
|
`Ubuntu-24.04` WSL2 instance, with default user `neil`, home `/home/neil`, x86_64, and an ext-family
|
|
distro filesystem. No standalone Orca CLI is installed inside that distro; WSL skill operations
|
|
are owned by the connected Windows Orca runtime. A reproducible second-distro setup is
|
|
`wsl --install -d Debian --no-launch`, followed by first launch and an isolated Orca test user/home
|
|
record before the multi-distro gate.
|
|
|
|
At commit `1e2d2e806f`, the opt-in real-Windows workspace harness created an actual Git linked
|
|
worktree and a plain non-Git folder under owner-controlled temporary roots containing spaces and
|
|
non-ASCII characters. It installed globally and into both workspace kinds through host-owned IDs,
|
|
then removed the complete fixture tree. The full native `src/main/skills` slice passed 284 tests
|
|
with 21 intentional platform skips across 43 files, and the Node typecheck passed. Two discovery
|
|
fixtures uncovered by that run now use Windows junctions instead of privileged directory symlinks,
|
|
matching Orca's supported Windows placement topology.
|
|
|
|
At commit `cdafe43542`, the opt-in WSL semantics harness used real provider detection and installed
|
|
through the selected distro after converting UNC verification paths to distro-native paths. The
|
|
run passed both cases: Linux case sensitivity was preserved, regular files were `0600`, executable
|
|
files were `0700`, and the packaged script executed successfully. Existing real transaction
|
|
coverage also verified POSIX provider alias creation inside the distro.
|
|
|
|
At commit `92c8c6a4c6`, the exact portable package golden passed 26/26 focused tests from a native
|
|
WSL filesystem using an isolated user-owned Node 24 toolchain. The package digest and archive
|
|
SHA-256 matched macOS, native Windows, and Linux container results; the temporary WSL toolchain,
|
|
source snapshot, dependencies, and package-manager store were removed after the run.
|
|
|
|
Commit `97b831dd17` stabilized the physical Windows recovery harness by asserting parsed JSON paths
|
|
instead of shell-escaped text and by using a fake clock for upload ownership expiry. The combined
|
|
run then exposed a real WSL placement bug: native UNC `lstat` could miss an existing distro symlink,
|
|
so GNU `ln -s` followed it and created a self-link inside the canonical skill. Commit `44d1266641`
|
|
now asks the WSL filesystem whether the alias already targets the canonical path before native
|
|
existence checks and uses `ln -sT` for safe creation.
|
|
|
|
Only `Ubuntu-24.04` is installed on this host. A second-distro permutation is a post-launch
|
|
resilience follow-up, not a first-release gate. On 2026-08-12, the owner accepted the additional
|
|
live WSL-to-staging journey as duplicate evidence after the physical Windows/WSL matrix and native
|
|
Windows Cloud lifecycle passed; the remaining disconnect/cancellation boundaries stay recorded as
|
|
residual follow-up work.
|
|
|
|
### Host preparation
|
|
|
|
- [x] Confirm `windows 2` is saved and reachable through `orca environment list` and
|
|
`orca status --environment "windows 2" --json`.
|
|
- [x] Confirm the host provides both a native Git checkout and a native plain folder workspace.
|
|
- [x] Record Windows edition/build, architecture, filesystem type, long-path policy, current user
|
|
home, temp root, antivirus status, and developer-mode/symlink policy without collecting
|
|
secrets.
|
|
- [x] Discover installed WSL version and distros, each distro's running state, default user, home,
|
|
filesystem, and Orca host support.
|
|
- [x] Ensure at least two WSL distros are available or record a reproducible second-distro setup
|
|
for the multi-distro test.
|
|
- [x] Create isolated test skills and destination roots under explicit test workspaces; never use
|
|
production user skill directories for destructive failure injection.
|
|
- [x] Record exact Orca client/server versions and capabilities with each test run.
|
|
|
|
### Native Windows package and destination tests
|
|
|
|
- [x] Package on macOS and install on native Windows; compare manifest and digest. The physical
|
|
staging journey installed the macOS-published archive with the exact published digest, and
|
|
the portable golden independently matched manifest, package digest, and archive SHA-256.
|
|
- [ ] Package on native Windows and install on macOS/Linux; compare identity and executable-mode
|
|
policy.
|
|
- [x] Test global home resolution without constructing the path on the macOS client.
|
|
- [x] Test a host-owned real Git worktree and plain folder workspace independently.
|
|
- [ ] Test path joining, drive prefixes, UNC rejection/handling policy, reserved names, trailing
|
|
dots/spaces, long paths, Unicode normalization, and case collisions.
|
|
- [x] Test source and destination paths containing spaces and non-ASCII characters.
|
|
- [x] Test junction creation succeeds for a detected provider.
|
|
- [x] Force junction denial and verify an independently copied, digest-verified fallback.
|
|
- [x] Test an unowned junction, external link, broken junction, and provider parent that is already
|
|
linked. All four real NTFS junction cases passed on `windows 2` at `c7c8a2e32d`; Orca repairs
|
|
only its receipt-owned broken junction and preserves unowned links.
|
|
- [x] Test copy-fallback drift during update and removal. Real Windows coverage at `b4f5b6c119`
|
|
proves a locally modified independent copy is skipped during reconciliation and refused
|
|
during removal without changing its bytes.
|
|
- [x] Hold destination files open to simulate antivirus/indexer contention and verify bounded
|
|
`EPERM`, `EACCES`, and `EBUSY` rename retries. A real `FileShare.None` lock on `windows 2`
|
|
proved transient recovery and bounded exhaustion at `18fe31f107`.
|
|
- [x] Verify retry exhaustion restores the old version and yields an actionable result. The
|
|
transaction preserves the old bytes and returns retryable
|
|
`skill-install-filesystem-failed`; the real Windows source remains intact for retry.
|
|
- [x] Terminate the runtime before and after each journal boundary and verify startup recovery.
|
|
The combined physical Windows run passed the real-process extraction, install, removal, and
|
|
upload restart suites, including begun, partial, fully uploaded, and committed upload states.
|
|
- [ ] Test permission-denied, read-only, disk-full, cancellation, runtime disconnect, and partial
|
|
provider-coverage paths. Deterministic `EACCES` and `ENOSPC` transaction injection now proves
|
|
the prior installed version remains intact; physical read-only/disk-full and disconnect
|
|
journeys remain open.
|
|
|
|
### WSL tests
|
|
|
|
- [x] Execute package ingress, extraction, home resolution, installation, provenance, and discovery
|
|
inside the selected distro.
|
|
- [x] Prove the Windows client never constructs a Linux home or mutates the distro through a
|
|
translated Windows path.
|
|
- [ ] Post-launch: test global installs for a second distro with a different default user/home.
|
|
- [x] Test Linux case sensitivity and executable modes inside the installed distro. Real
|
|
`Ubuntu-24.04` coverage passed at `cdafe43542` with `0600` regular files and `0700`
|
|
executable files.
|
|
- [x] Install a multi-skill bundle selectively into a distro-owned home and prove unselected skills
|
|
are absent. The first `windows 2` run found missing filesystem preparation; the fix at
|
|
`70b847c38e` passed all 3 real `Ubuntu-24.04` tests and the temporary worktree was removed.
|
|
- [ ] Post-launch: repeat Linux case-sensitivity and executable-mode coverage in a second distro.
|
|
- [ ] Test a distro-owned Git worktree and plain folder workspace.
|
|
- [x] Test a workspace on the distro filesystem and document behavior for `/mnt/c` separately.
|
|
- [x] Test provider detection and POSIX alias creation inside the distro. Real `Ubuntu-24.04`
|
|
provider detection passed at `cdafe43542`; the transaction harness also verified the Claude
|
|
placement as a distro-owned POSIX symlink.
|
|
- [ ] Test concurrent native Windows and WSL installs of the same package without provenance or
|
|
lock collision across host identities.
|
|
- [ ] Test distro stopped, distro removed, default user changed, home moved, and runtime restarted
|
|
between preview and install.
|
|
- [ ] Block outbound GCS access inside WSL and verify client-mediated chunk transfer.
|
|
- [ ] Disconnect the macOS client during transfer and commit; verify bounded cleanup and recovery.
|
|
|
|
### Windows/WSL mixed-version tests
|
|
|
|
- [ ] Use `windows 2` as old host with a newer client and verify capability-gated UI.
|
|
- [ ] Upgrade `windows 2` only through the normal supported update path, then test an older client
|
|
against the newer host.
|
|
- [ ] Verify folder-workspace IDs, runtime-owned paths, and results survive client/host version
|
|
skew.
|
|
- [x] Capture structured test evidence without signed URLs, tokens, skill contents, or private
|
|
absolute paths beyond approved test fixtures.
|
|
|
|
### Windows/WSL release gate
|
|
|
|
- [x] Real native Windows passes junction success, junction denial, verified copy fallback,
|
|
antivirus contention, long paths, crash recovery, Git worktree, and folder-workspace tests.
|
|
The final combined run passed 449 tests across 67 files at `44d1266641`.
|
|
- [ ] Real WSL passes distro-owned paths, Linux semantics, provider placement, cancellation, and
|
|
crash recovery tests. Distro-owned paths, semantics, provider placement, and interrupted
|
|
update recovery passed in the combined physical matrix. The owner accepted the additional
|
|
live WSL-to-staging journey as duplicate release evidence on 2026-08-12; physical
|
|
disconnect/cancellation injection remains open, and a second distro is post-launch.
|
|
- [x] Temporary local test installations, workspaces, and packages are removed through verified,
|
|
recoverable cleanup. The final checkout was clean and WSL `/tmp` had no `orca-skill-*` debris.
|
|
|
|
## 11. Implement and validate SSH targets
|
|
|
|
The 2026-08-11 live Orca inventory contained only the connected `windows 2` environment and no
|
|
non-local worktree or repository. Later staging journeys registered disposable Ubuntu 20.04 and
|
|
native macOS ARM64 hosts directly through Orca's SSH provider and removed them afterward. A
|
|
supported Windows SSH target remains required for its platform-specific gate.
|
|
|
|
The Docker-backed Linux SSH harness exercises the production Electron → SSH provider → relay →
|
|
remote installer path. Its loopback package origin is unreachable from the container, forcing
|
|
client-mediated chunk upload. The test independently verifies Cloud request receipts and remote
|
|
files for global, Git-worktree, and plain-folder installs, unchanged preview, listing, and removal.
|
|
Physical staging journeys additionally passed the supported Ubuntu 20.04/glibc 2.31 floor and
|
|
native macOS ARM64; supported Windows remains open.
|
|
|
|
- [x] Define a host-side installer command that invokes the same installer core and structured
|
|
result contract.
|
|
- [x] Transfer immutable packages through the existing SSH/SFTP provider into bounded private
|
|
staging.
|
|
- [x] Invoke installation on the SSH host so it owns home, path, provider, and filesystem
|
|
resolution.
|
|
- [x] Add capability/version detection for the required host component.
|
|
- [x] If unsupported, offer a package download or explicit command; never install into the
|
|
desktop's home as fallback.
|
|
- [x] Propagate cancellation and clean partial SSH transfers and staging.
|
|
- [x] Route selective bundle installs through an additive SSH method with direct download,
|
|
client-mediated fallback, per-skill results, and old-host capability fencing.
|
|
- [ ] Test SSH-only macOS, Linux at the supported floor, and Windows where the existing provider
|
|
supports it. Ubuntu 20.04/glibc 2.31 and native macOS ARM64 passed the full live staging
|
|
lifecycle; supported Windows remains open.
|
|
- [x] Test Git worktree and folder-workspace scope over SSH through the disposable Docker Linux
|
|
target and verify the host-owned paths independently.
|
|
- [ ] Test connection loss during upload, extraction, commit, provenance, and result return. Lost
|
|
result-return recovery is covered for direct and staged SSH installs; the other physical
|
|
boundaries remain open.
|
|
- [x] Prove SSH and paired runtimes return the same result and error-category contracts. The full
|
|
nine-category matrix now passes through both transports with exact code and retryability
|
|
preservation. This exposed and fixed SSH's numeric JSON-RPC code taking precedence over its
|
|
validated structured skill failure; arbitrary error data remains rejected by the strict
|
|
schema.
|
|
|
|
## 12. Add observability, operations, and security controls
|
|
|
|
### Metrics and dashboards
|
|
|
|
- [x] Record bounded package byte/file counts and package, upload, finalization, download, transfer,
|
|
install, placement, and recovery durations.
|
|
- [x] Record outcomes by error category, OS, destination kind, transport, conflict type, and
|
|
placement topology.
|
|
- [x] Record junction, alias, copy-fallback, rollback, recovery, capability-absence, and orphan
|
|
reconciliation counts.
|
|
- [x] Add dashboards for grant/finalize/share rates, authorization and rate limits, finalization
|
|
saturation, archive rejection, and digest mismatch.
|
|
- [x] Add Cloud Run 5xx, CPU, memory, instance, and skill-route latency panels and alerts.
|
|
- [x] Add GCS quarantine/published bytes, object count, and lifecycle failure panels and alerts.
|
|
- [x] Add PostgreSQL connection, storage, query latency, migration, and transaction panels and
|
|
alerts.
|
|
- [x] Add signed-policy/URL generation and IAM Credentials failure alerts. Grant-signing failures
|
|
are mapped to a stable application category so the alert does not depend on project-wide
|
|
Data Access audit logging; evidence is in Orca Cloud `69b388e`.
|
|
- [ ] Add budget alerts for GCS storage/egress, Cloud Run growth, and Cloud SQL storage.
|
|
|
|
Dashboard evidence in Orca Cloud `41ef335` and `f67ee2c`: upload-grant, finalize, share, and
|
|
download-grant success; bounded security failures; Cloud Run CPU, memory, instances, and latency;
|
|
GCS bytes and object count; and Cloud SQL connections, disk use, p99 skill-principal query latency,
|
|
and skill-database transaction rate. Cloud PR `#344` passed both required checks and merged as
|
|
`fcf8655a`; it adds privacy-bounded migration-ready/failure metrics, a migration lifecycle panel,
|
|
and a zero-tolerance migration-failure alert. Its targeted staging plan creates the two metrics and
|
|
alert, updates only the dashboard, reruns descriptor propagation, and destroys no infrastructure.
|
|
Cloud PR `#345` passed both required checks and merged as `06a5c729`; it normalizes malformed
|
|
compression failures to the bounded `skill_package_archive_invalid` category, adds explicit
|
|
finalization-saturation and archive-rejection metrics, and displays successful and failed API
|
|
operations as rates. The broader unchecked items still require the listed split metrics, lifecycle
|
|
visibility, budget coverage, and reviewed alert thresholds. Cloud PR `#346` passed both required
|
|
checks and merged as `8199c048`; it adds privacy-bounded per-route latency distributions, sustained
|
|
80% CPU/memory and near-instance-ceiling alerts, separate five-second interactive and 30-second
|
|
finalization p99 latency alerts, and a route-template p99 dashboard without bearer identifiers.
|
|
Cloud PR `#347` passed both required checks and merged as `65320475`; it adds a six-hour
|
|
aggregate-only storage inventory job, fixed quarantine/published bytes and object-count metrics,
|
|
an overdue-quarantine metric, two storage panels, and an overdue-or-job-failure alert. The monitor
|
|
identity has only `storage.objects.list`, while the scheduler can invoke only that job. The reviewed
|
|
targeted staging apply added 18 observability resources, updated the existing dashboard, and
|
|
replaced only the inert descriptor-propagation timer. A manual run emitted only aggregate fixed-
|
|
namespace measurements with zero overdue objects; the post-apply targeted plan is zero-diff, SQL
|
|
remained `NEVER`/`STOPPED`, all Relay MIG targets remained zero, and production remained disabled.
|
|
|
|
Desktop operations now emit local diagnostic spans for package creation, direct upload,
|
|
finalization, grant download, client-mediated runtime/SSH transfer, single and bundle install,
|
|
provider placement, transaction rollback settlement, and startup recovery. Package bytes/files,
|
|
OS, destination kind, transport, conflicts, placement topology/mechanism, copy fallback,
|
|
capability absence, recovered transactions, stale extraction/lock cleanup, and failure categories
|
|
use fixed or bounded values; bundle error-category cardinality is capped at 32. The implementation
|
|
adds no product telemetry event, RPC field, persisted schema, or remote opcode. The skill-sharing
|
|
release suite passes 427 tests with 29 expected platform skips, the focused affected matrix passes
|
|
102 tests with one expected skip, typecheck and the full lint pipeline pass, and the real-process
|
|
macOS recovery matrix passes all 17 crash boundaries. The final combined physical Windows/WSL run
|
|
passes 449 tests across 67 files with 17 intentional platform skips; live WSL staging and physical
|
|
disconnect boundaries remain separate gates below.
|
|
|
|
### Logging and privacy
|
|
|
|
- [x] Log package/version IDs, phases, destination labels, placement outcomes, and bounded error
|
|
categories only.
|
|
- [x] Exclude package contents, filenames, manifests, raw local paths, ACL membership, durable share
|
|
URLs, upload policies, download grants, and credentials.
|
|
- [x] Redact sensitive network values before logger invocation, not after ingestion.
|
|
- [x] Audit authorization and lifecycle events without instruction or script contents.
|
|
- [x] Verify diagnostics and support bundles preserve the same exclusions. Desktop install spans
|
|
map requests and results to bounded labels before the tracer boundary; regression coverage
|
|
proves raw paths, filenames, manifests, ACL values, durable share URLs, upload policies,
|
|
download grants, credentials, and raw error text never enter the collected bundle.
|
|
|
|
### Security review
|
|
|
|
- [x] Threat-model package creation, archive ingestion, manifest trust, path containment, local
|
|
conflicts, grants, redirects/SSRF, authorization, tenant isolation, and instruction/script
|
|
trust in `docs/reference/agent-skill-sharing-threat-model.md`; keep approval and residual-risk
|
|
acceptance as separate human gates.
|
|
- [x] Verify owner-private staging permissions on supported hosts. POSIX download, package,
|
|
extraction, upload-session, provenance, and lock tests require `0700` directories and `0600`
|
|
files; real WSL verifies owner-private executable modes; and the native-Windows privacy suite
|
|
verifies staging remains under the owning profile without broad ACL disclosure.
|
|
- [x] Rate-limit uploads, finalization, downloads, share resolution, and remote transfer sessions.
|
|
- [x] Test malicious redirects, DNS/host confusion, expired grants, mismatched generations, and
|
|
oversized streaming bodies. Exact HTTPS origins, manual same-origin redirects, URL
|
|
credentials, suffix/port confusion, streamed byte bounds, expiry-before-fetch, and immutable
|
|
GCS generation pinning are covered in Orca `534abb8908` and Orca Cloud `81a581d`.
|
|
- [x] Test archive and filesystem race conditions, including source drift and destination changes
|
|
after preview. Package creation re-observes staged bytes, and install commit re-observes the
|
|
locked canonical destination before its first destructive rename.
|
|
- [ ] Review organization departure, deletion, retention, soft-delete, and operator recovery.
|
|
- [ ] Complete privacy and security sign-off before external rollout.
|
|
|
|
### Runbooks and kill switches
|
|
|
|
- [x] Add independent server-side flags for upload grants, download grants, and remote
|
|
installation.
|
|
- [x] Verify disabling Cloud grants does not break skill discovery or already installed skills.
|
|
- [x] Document finalization saturation, GCS/IAM signing failure, database outage, corrupt package,
|
|
orphan reconciliation, and rollback response.
|
|
- [x] Document coordinated PostgreSQL point-in-time and GCS generation/soft-delete restoration.
|
|
- [x] Document package/share deletion, organization departure, legal retention, and audit handling.
|
|
- [x] Document how and when to split finalization into its own service.
|
|
|
|
## 13. Complete automated and end-to-end validation
|
|
|
|
### Transaction matrix
|
|
|
|
- [x] Test fresh install, identical reinstall, clean update, rollback, explicit replacement, and
|
|
safe removal.
|
|
- [x] Test modified and unowned canonical and provider conflicts.
|
|
- [ ] Test canonical/provider paths as regular files, directories, aliases, junctions, external
|
|
links, and broken links. Deterministic native coverage now preserves canonical regular-file
|
|
name collisions, unowned provider files/directories, external and broken unowned links,
|
|
Orca-owned broken-link repair, aliases, and verified copy fallback. Physical Windows
|
|
junction coverage remains open.
|
|
- [ ] Test concurrent desktop, headless runtime, CLI, SSH, and recovery attempts.
|
|
The shared transaction core now serializes two simultaneous installs into one installed and
|
|
one unchanged result, one receipt, and no staging residue. The host request service also
|
|
serializes simultaneous download-grant and trusted-local ingress requests with the same
|
|
guarantees. A real multi-process harness proves an on-disk destination lock returns a
|
|
retryable busy result without residue, then converges to unchanged after the owning process
|
|
commits and releases; the release gate runs it on macOS, native Windows, and Ubuntu 20.04.
|
|
Named desktop/headless/CLI/SSH/recovery process combinations remain open.
|
|
- [ ] Test permission and read-only failures, disk exhaustion, cancellation, process termination,
|
|
and host disconnect. Simulated `EACCES` and `ENOSPC` preservation plus lost-response retry are
|
|
covered; physical failure and termination journeys remain open.
|
|
- [x] Test independent-copy drift and incomplete provider coverage. Deterministic transaction
|
|
coverage preserves modified independent copies, retains canonical success when an unowned,
|
|
failed, or cancelled provider placement cannot be reconciled, reports the exact partial
|
|
placement outcome, and repairs interrupted coverage on retry.
|
|
|
|
### Platform and target matrix
|
|
|
|
- [ ] Run macOS ARM64 and x64 behavior where supported.
|
|
- [x] Run Linux against Ubuntu 20.04/glibc 2.31 and verify bundled native binaries respect the
|
|
floor. The exact x64 directory package passed its 18-binary ABI scan and packaged
|
|
`node-pty` load/spawn smoke inside Ubuntu 20.04 at `f1dccb4f42`. The exact ARM64 directory
|
|
package at `abe92d565b` passed the same 18-binary floor scan and emitted
|
|
`orca-node-pty-floor-ok` from an ARM64 Ubuntu 20.04 container on native `aarch64` hardware.
|
|
- [x] Run native Windows and WSL scenarios on `windows 2`.
|
|
- [x] Run local and remote Git worktrees and plain folder workspaces. Native Windows covered a
|
|
linked worktree and folder; paired desktop and Docker SSH covered host-owned worktrees and
|
|
folders; physical Ubuntu SSH covered the global lifecycle.
|
|
- [x] Run same-build paired desktop and headless runtimes through client-mediated transfer; headed
|
|
coverage includes global, Git-worktree, and plain-folder scopes, while headless coverage
|
|
includes global and Git-worktree scopes.
|
|
- [ ] Run paired runtimes with both client-newer and server-newer combinations.
|
|
- [ ] Run supported SSH-only macOS, Linux, and Windows targets. Native macOS ARM64 and Ubuntu
|
|
20.04/glibc 2.31 passed full staging lifecycles; supported Windows remains open.
|
|
- [x] Run a remote target without outbound Cloud connectivity through chunk transfer. The Docker
|
|
SSH target could not reach the loopback package origin and completed global, worktree, and
|
|
folder installation through client-mediated upload.
|
|
|
|
### Required journeys
|
|
|
|
- [ ] Share on machine A, install globally on machine B, launch a detected agent, and discover the
|
|
skill.
|
|
- [ ] Share on machine A, install into a folder workspace on a connected runtime, and discover it
|
|
only in that workspace.
|
|
- [x] Modify installed bytes, publish an update, and prove Orca refuses silent replacement. The
|
|
browser-free macOS staging lifecycle preserved the modified v1 copy before applying v2 only
|
|
after the explicit test decision.
|
|
- [ ] Disconnect during commit, reconnect, recover, and prove either the old or new version is
|
|
complete.
|
|
- [x] Revoke a share, prove a new install fails, and prove the existing local install remains.
|
|
Bearer-route tests and staging smoke reject revoked resolution/grants; macOS, native Windows,
|
|
paired, and SSH lifecycles independently preserve already installed bytes.
|
|
- [x] Publish a new immutable version, update one machine, leave another pinned, then rollback the
|
|
updated machine. The physical Windows staging journey updated only the remote host to v2,
|
|
retained the local machine's independent version, and rolled Windows back to v1.
|
|
- [x] Remove local installation without deleting its Cloud package, then delete/revoke Cloud
|
|
access without mutating another local installation. Staging lifecycles separate host/local
|
|
removal from package deletion, and revocation never mutates either installed copy.
|
|
|
|
### CI and test evidence
|
|
|
|
- [x] Add deterministic fixtures authored for Orca without copying upstream fixtures.
|
|
- [x] Add failure-injection hooks available only to tests/development harnesses.
|
|
- [x] Add a CLI-only developer harness for local and remote integration tests.
|
|
- [x] Keep CI commands compatible with macOS, Linux, Windows PowerShell/cmd, and WSL.
|
|
- [x] Archive bounded test results and security evidence without secrets or private contents. The
|
|
required release jobs archive bounded machine-readable results; privacy-safe Cloud field
|
|
inventories, load aggregates, and recovery evidence contain no grants or package contents.
|
|
- [x] Make package safety, transaction recovery, platform, and mixed-version suites required release
|
|
checks. Release publication now depends on focused macOS, real native-Windows, and Ubuntu
|
|
20.04/glibc 2.31 jobs that archive bounded machine-readable results.
|
|
|
|
## 14. Stage and release
|
|
|
|
### Staging
|
|
|
|
- [x] Apply reviewed Terraform and migrations to staging.
|
|
- [x] Deploy `orca-cloud-api` skill routes disabled by server-side flags.
|
|
- [x] Enable all four staging controls and pass the GitHub OIDC owner plus anonymous bearer-link
|
|
lifecycle smoke, including owner management, immutable versions, local/remote grants,
|
|
rollback selection, expiry, revocation, deletion, and object cleanup.
|
|
- [x] Run staging upload/finalize/download smoke for anonymous denial, oversize, corruption,
|
|
expiry, revocation, deletion, and cleanup; retain tenant-deduplication coverage in the API
|
|
integration suite.
|
|
- [x] Run desktop-to-local, paired-runtime, `windows 2`, WSL-equivalent host ingress, and SSH
|
|
journeys in staging.
|
|
Browser-free macOS run `31569902499` passed publish, install, conflict preservation, update,
|
|
rollback, revocation, installed-copy preservation, removal, and Cloud deletion. Physical
|
|
native Windows passed the same lifecycle through run `31591275227`, including remote-owned
|
|
path and digest verification with no macOS fallback. A disposable Ubuntu 20.04/glibc 2.31
|
|
host passed the same SSH lifecycle after guarded wake `31603249983`; guarded sleep
|
|
`31604391897` restored the low-cost state. An isolated headless host passed the paired
|
|
non-Windows lifecycle after guarded wake `31605729090`; guarded sleep `31606600532` restored
|
|
the low-cost state. The physical Windows/WSL matrix separately passed 449 tests on real NTFS
|
|
and Ubuntu 24.04 filesystems. On 2026-08-12, the owner accepted another WSL Cloud lifecycle as
|
|
duplicate evidence rather than a launch gate.
|
|
- [x] Give the live staging E2E an owner-private persisted test profile or a short-lived
|
|
non-interactive test credential so reruns do not open PKCE login tabs or copy a user's
|
|
primary Orca session.
|
|
- [x] Verify staging application logs contain only route templates, method, status, duration, and
|
|
standard process metadata, with zero credential or private-content matches. Exclude per-link
|
|
Cloud Run platform request logs through Terraform and verify zero are retained.
|
|
- [x] Verify logs, metrics, traces, diagnostics, and support bundles contain no grants or private
|
|
package data. The physical SSH window emitted 27 structured route-template events whose
|
|
complete application field inventory was only duration, event, hostname, level, method,
|
|
process ID, route template, status, and time; it emitted zero API error logs. Install traces
|
|
retain only bounded IDs, counts, labels, and enums. The support-bundle suite injects private
|
|
paths, filenames, contents, share URLs, signed grants, policies, ACLs, and credentials and
|
|
proves none survive collection. No skill-sharing product telemetry event is registered.
|
|
- [x] Load-test finalization and choose the fixed semaphore from observed memory, CPU, request
|
|
latency, and database usage. Run `31585710645` kept the existing semaphore: its 12 concurrent
|
|
30-skill bundles produced two immediate successes and ten explicit saturation responses,
|
|
1,514 ms client p95, 8.95% API CPU, 26.95% API memory, one API instance, 10.89% database CPU,
|
|
25.59% database memory, and seven database connections.
|
|
- [ ] Exercise at least one quarantine lifecycle deletion and published-object soft-delete
|
|
recovery. Published-object recovery passed run `31580071168`; the one-day quarantine
|
|
lifecycle deletion remains time-gated.
|
|
|
|
### Production infrastructure and launch
|
|
|
|
- [x] Apply the approved production Terraform plan and verify no unrelated replacement. The saved
|
|
skill-only plan added 40 resources with zero updates, replacements, or deletions; the
|
|
storage-monitor follow-up added one narrow IAM binding with zero changes or deletions. The
|
|
final hardening used two reviewed targeted phases: 13 additions plus one WIF update, followed
|
|
by exactly five broad-IAM deletions. A separate targeted apply made nine in-place
|
|
observability updates. No full plan or unrelated Relay drift was applied.
|
|
- [x] Run production database migrations before routing skill traffic. Disabled-route bootstrap
|
|
run `31648015091` completed the skill schema migration before any skill route was enabled.
|
|
- [x] Deploy the API with all skill flags disabled. Bootstrap revision `orca-cloud-api-00016-yem`
|
|
received 100% traffic and returned `404` for the disabled skill route while Artifact and Auth
|
|
health remained green.
|
|
- [x] After every first-release gate passes, enable the feature for all accounts in one launch.
|
|
Production run `31650178315` initially enabled upload, download, remote install, and sharing
|
|
together. Hardening run `31661421728` then passed candidate and canonical authenticated
|
|
artifact plus skill smoke and promoted `orca-cloud-api-00025-qup` at 100% traffic with digest
|
|
`sha256:e4f044105ff2345574bdceb36eec1629761428cc2edf9d743939390b857d61e0`.
|
|
- [ ] Verify one complete share, local install, remote install, update, rollback, revoke, local
|
|
removal, Cloud deletion, upload expiry, and soft-delete recovery journey. Production CI has
|
|
verified the server-side share/version/grant/revoke/delete lifecycle; the signed-in desktop
|
|
and real-host production journey remains manual.
|
|
- [ ] Verify upload, download, and remote-install kill switches independently.
|
|
- [ ] Review error budgets, cost, authorization denials, saturation, orphan counts, and support
|
|
signals. The hardened production revision has zero post-deploy error logs. All eight skill
|
|
alerts route to the enabled dedicated `Orca skill sharing alerts` channel, and aggregate
|
|
monitor execution `orca-cloud-skill-storage-monitor-lfd26` passed on the serving API digest
|
|
with zero overdue objects. Sustained-usage review remains post-launch.
|
|
|
|
### Launch operations
|
|
|
|
- [x] Keep upload grants, download grants, and remote installation independently controllable.
|
|
Separate Terraform-owned Cloud Run variables gate upload/finalize/share publication,
|
|
download grants, and remote-target grants. Route tests prove each narrow control while local
|
|
grants remain available when only remote installation is disabled; staging advertises all
|
|
three explicit controls.
|
|
- [ ] Disable the affected operation on unexplained digest mismatch, archive containment failure, data leak,
|
|
unrecoverable local mutation, or cross-tenant authorization defect.
|
|
- [x] Publish user documentation for sharing, access, install destinations, updates, rollback,
|
|
removal, retention, and trust in
|
|
[`docs/reference/sharing-agent-skills.md`](./reference/sharing-agent-skills.md).
|
|
- [x] Publish admin documentation for organization access, user departure, deletion, and retention
|
|
in [`docs/reference/admin-agent-skill-sharing.md`](./reference/admin-agent-skill-sharing.md).
|
|
- [ ] Remove rollout flags only after sustained healthy usage and a reviewed decision.
|
|
|
|
### First-release gate
|
|
|
|
- [ ] Threat model and privacy review are approved.
|
|
- [x] Cross-platform package and transaction suites are required and green. Release publication
|
|
requires focused macOS, native-Windows, and Ubuntu 20.04/glibc 2.31 jobs with bounded archived
|
|
results; the latest recorded release and platform passes are green.
|
|
- [ ] `windows 2` native Windows and WSL release gates pass on real filesystems. The combined run
|
|
passed 449 tests across 67 files, and the owner accepted the additional live WSL Cloud
|
|
journey as duplicate evidence on 2026-08-12. Physical WSL disconnect/cancellation injection
|
|
remains open.
|
|
- [x] Real SSH paths and host-owned resolution pass. Native macOS ARM64 and Ubuntu 20.04/glibc
|
|
2.31 independently passed SSH-owned global install, update, rollback, managed inventory,
|
|
revocation preservation, removal, and Cloud cleanup without local fallback.
|
|
- [x] Mixed-version tests pass in both directions. Bundle/install capabilities are additive, the
|
|
cross-version wire suite passes client-newer and host-newer, and capability-loss tests prove
|
|
execution is blocked after a stale preview.
|
|
- [ ] Cancellation and crash recovery pass during transfer and every commit boundary.
|
|
- [x] Durable-share authorization, revocation lag, retention, deletion, and recovery are documented
|
|
and tested. The user/admin guides document the lifecycle; Cloud route, integration, restore,
|
|
and cleanup suites cover the implemented contract. Automatic one-day quarantine deletion
|
|
remains a separate time-gated infrastructure observation.
|
|
- [x] The UI identifies scripts and executable content before install without exposing internal
|
|
publisher or organization identifiers. Renderer coverage asserts script and executable
|
|
summaries, digest, release notes, and long-content behavior before the primary install
|
|
action.
|
|
- [x] Telemetry, logs, and diagnostic bundles contain no credentials or private contents. Cloud
|
|
field-inventory and sensitive-value scans, bounded install-span attributes, and adversarial
|
|
support-bundle collection tests cover the complete first-release data path.
|
|
- [x] Kill switches are tested without affecting discovery or existing installations. Cloud PR
|
|
`#342` proves unlisted-link preview remains available with upload, download, and remote
|
|
installation controls disabled; existing route coverage proves remote-off retains local
|
|
grants. Existing installations and local discovery use only host-owned files and receipts.
|
|
|
|
## 15. Post-release multi-machine management and reconciliation
|
|
|
|
- [ ] Measure sharing, installation, update, conflict, fallback, failure, and multi-machine demand
|
|
without collecting private contents.
|
|
- [ ] Add **Install on another machine** and bounded multi-machine progress.
|
|
- [ ] Add optional desired-version policy for selected personal or organization machines.
|
|
- [ ] Add opt-in drift and missing-install reconciliation that never overwrites modifications.
|
|
- [ ] Evaluate an explicit, reviewable project desired-state manifest.
|
|
- [ ] Evaluate direct machine-to-machine transfer if Cloud persistence is not appropriate.
|
|
- [ ] Define offline convergence without durable shared credentials.
|
|
- [x] Document organization removal, user departure, package retention, and reconciliation
|
|
semantics before enabling policy-driven installs. The admin guide explicitly leaves legal
|
|
retention and ownership-transfer approval as human release gates.
|
|
|
|
## 16. Agent and Orca CLI publishing
|
|
|
|
- [x] Add a separate `agentSkillSharingEnabled` capability that defaults off and accepts only an
|
|
exact persisted `true` value. Manual desktop publishing remains independent.
|
|
- [x] Let only the local desktop Settings → Share Skills switch grant the capability. Runtime
|
|
`settings.get` exposes a fail-closed read-only projection; `settings.update`, paired web,
|
|
mobile, agents, and the CLI cannot enable it.
|
|
- [x] Add `orca skills installed --json` with discovery IDs and names but no local filesystem paths.
|
|
- [x] Add `orca skills share` with repeated explicit `--skill` selectors, a required bundle name,
|
|
one unlisted link for multi-skill bundles, and no `--all` or arbitrary-path input.
|
|
- [x] Resolve exact discovery IDs before unambiguous names; fail missing, ambiguous, and duplicate
|
|
bundle-folder names with actionable errors.
|
|
- [x] Enforce the capability in the executing runtime before discovery, before package reads, and
|
|
again before publishing. CLI preflight is an optimization, not the authority.
|
|
- [x] Reject forwarded WSL, SSH, and paired-runtime CLI contexts before discovery so native file
|
|
APIs cannot read a path belonging to another machine. Native runtimes remain supported on
|
|
macOS, Linux, and Windows.
|
|
- [x] Reuse the reviewed bundle preparation and Cloud publisher, propagate RPC cancellation into
|
|
upload, and remove per-operation preparation files after success, denial, cancellation,
|
|
authentication failure, or Cloud failure.
|
|
- [x] Admit one agent bundle preparation/publish at a time per host so concurrent agents cannot
|
|
multiply the bounded per-bundle disk and CPU budget.
|
|
- [x] Keep CLI JSON limited to the unlisted URL, public share/package/version IDs, bundle name, and
|
|
selected skill summaries; never return auth tokens or source paths.
|
|
- [x] Add gate, persistence, RPC grant-denial, selector, archive-content, cancellation, cleanup,
|
|
web mirror, Windows-path contract, CLI parser/help, and Settings UI tests.
|
|
- [ ] Complete a live signed-in production publish through the dev CLI, resolve the returned link,
|
|
revoke it, and confirm a later resolution fails while the local source skills remain intact.
|
|
- [ ] Complete independent OpenCode and release-readiness review, full repository validation, PR
|
|
CI, and an ad hoc build from the final commit.
|