mirror of
https://github.com/stablyai/orca.git
synced 2026-10-24 16:03:45 +00:00
fix(skills): hide internal publisher identity
This commit is contained in:
@@ -11,7 +11,8 @@ Implementation baselines captured by this checklist update:
|
||||
merged as `8045c85dad`; encrypted physical-host credential PR `#336` merged as `8fce3298ef`;
|
||||
kill-switch discovery PR `#342` merged as `c2bef2ff20fb`; production remains untouched.
|
||||
Windows device-name validation PR `#343` merged as `dbb14a658cbc`; explicit disabled production
|
||||
bootstrap PR `#352` merged as `2a23f6ace5`; production remains untouched.
|
||||
bootstrap PR `#352` merged as `2a23f6ace5`; publisher-identity omission PR `#355` merged as
|
||||
`b3213bd34d1b224d8a3b11527eceaac883965400`; production remains untouched.
|
||||
|
||||
Validated so far:
|
||||
|
||||
@@ -272,6 +273,17 @@ Validated so far:
|
||||
`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
|
||||
@@ -979,8 +991,8 @@ does not mean the surrounding phase is complete.
|
||||
|
||||
### Install experience
|
||||
|
||||
- [x] Show authenticated author, organization, description, version, digest, file summary, scripts,
|
||||
and executable files.
|
||||
- [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.
|
||||
@@ -991,8 +1003,8 @@ does not mean the surrounding phase is complete.
|
||||
results with actionable recovery.
|
||||
- [x] Add incomplete-coverage retry.
|
||||
- [x] Open deep links in inspection mode without starting installation.
|
||||
- [x] Show publisher, organization, immutable version, skill count, scripts/executables, and
|
||||
release notes before selection.
|
||||
- [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
|
||||
@@ -1571,9 +1583,10 @@ disconnect boundaries remain separate gates below.
|
||||
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 author, organization, scripts, and executable content before install.
|
||||
Renderer coverage asserts publisher/organization identity, script and executable summaries,
|
||||
digest, release notes, and long-content behavior before the primary install action.
|
||||
- [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.
|
||||
|
||||
@@ -254,6 +254,18 @@ relay, install, temporary home, and one-time key material were removed. Guarded
|
||||
`31635145830` passed, and independent reads confirmed SQL `NEVER`/`STOPPED`, every MIG stable at
|
||||
zero with no active actions, and API/Auth/Relay minimum scale zero. Supported Windows SSH and the
|
||||
time-gated quarantine deletion remain open.
|
||||
|
||||
Cloud PR `#355` removed internal publisher and organization identifiers from recipient responses,
|
||||
passed code, Terraform, and PostgreSQL 16/17 checks, 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. Its unrelated post-promotion storage-monitor image update lacked
|
||||
`iam.serviceAccounts.actAs`; the prior monitor image remains serving and unchanged. Guarded sleep
|
||||
`31640935616` passed in 8m51s; independent reads verified SQL `NEVER`/`STOPPED`, all three Relay
|
||||
MIGs stable and reached at target zero, and the API at minimum scale zero while revision
|
||||
`00060-qay` retained 100% traffic.
|
||||
|
||||
Production remains untouched.
|
||||
|
||||
A final renderer lifecycle review fenced managed-install inventory by request generation so a
|
||||
@@ -350,7 +362,7 @@ The review dialog shows:
|
||||
- Bundle name and selected skill list.
|
||||
- Skill, file, and byte counts.
|
||||
- Included scripts and executable files, with an expandable review for each skill.
|
||||
- Current author identity.
|
||||
- The signed-in profile that will own and manage the share.
|
||||
- A clear warning that anyone with the unlisted link can inspect and install the bundle.
|
||||
- Optional version label and release notes.
|
||||
|
||||
@@ -371,8 +383,10 @@ deletion still require the owner to sign in.
|
||||
### Installing
|
||||
|
||||
Opening a deep link launches Orca and inspects the bundle without installing it. Preview identifies
|
||||
the publisher, organization, immutable version, release notes, skill count, scripts, and executable
|
||||
files. The recipient can select all or a subset of the contained skills.
|
||||
the immutable version, release notes, skill count, scripts, and executable files. V1 deliberately
|
||||
omits publisher identity from the recipient response and UI; internal creator and tenant records
|
||||
remain private authorization and management data. The recipient can select all or a subset of the
|
||||
contained skills.
|
||||
|
||||
The destination picker supports the local machine, paired runtimes, WSL, and SSH, in global or
|
||||
workspace scope. Before commit, the preview groups selected skills as new, unchanged, updates, or
|
||||
@@ -1276,7 +1290,8 @@ The detailed threat register and residual release gates live in
|
||||
[`docs/reference/agent-skill-sharing-threat-model.md`](./reference/agent-skill-sharing-threat-model.md).
|
||||
|
||||
- Treat `SKILL.md` and packaged scripts as executable code for trust messaging.
|
||||
- Show author, organization, version, digest, file summary, and executable files before install.
|
||||
- Show version, digest, file summary, and executable files before install without exposing internal
|
||||
publisher or organization identifiers.
|
||||
- Require the exact active bearer share ID for recipient resolution and every download grant;
|
||||
require authentication for publication and owner management.
|
||||
- Bind grants to one package version, digest, maximum byte count, and short expiration.
|
||||
|
||||
@@ -132,23 +132,6 @@ export function SkillBundleInstallReview(props: {
|
||||
{translate('auto.components.skills.SkillBundleInstallReview.01c5a11e06', 'SHA-256')}{' '}
|
||||
{manifest.bundleDigest}
|
||||
</p>
|
||||
{props.version.publisher ? (
|
||||
<p className="break-words text-xs text-muted-foreground">
|
||||
{translate(
|
||||
'auto.components.skills.SkillBundleInstallReview.01c5a11e07',
|
||||
'Published by Orca user'
|
||||
)}{' '}
|
||||
{props.version.publisher.userId}
|
||||
{props.version.publisher.organizationId
|
||||
? translate(
|
||||
'auto.components.skills.SkillBundleInstallReview.01c5a11e08',
|
||||
' in organization {{value0}}',
|
||||
{ value0: props.version.publisher.organizationId }
|
||||
)
|
||||
: ''}
|
||||
.
|
||||
</p>
|
||||
) : null}
|
||||
{props.version.releaseNotes.trim() ? (
|
||||
<p className="break-words whitespace-pre-wrap text-xs leading-5 text-muted-foreground">
|
||||
{translate(
|
||||
|
||||
@@ -40,8 +40,7 @@ function version(): SkillCloudVersion {
|
||||
}
|
||||
],
|
||||
packageDigest: DIGEST
|
||||
},
|
||||
publisher: { userId: 'author_1', organizationId: 'org_1' }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -139,15 +138,13 @@ afterEach(() => {
|
||||
})
|
||||
|
||||
describe('SkillInstallDialog', () => {
|
||||
it('renders long Unicode identity and multiline release notes before installation', async () => {
|
||||
it('renders long Unicode metadata and multiline release notes before installation', async () => {
|
||||
const sharedVersion = version()
|
||||
const longName = `skill-${'n'.repeat(58)}`
|
||||
const organizationId = `組織-${'o'.repeat(252)}`
|
||||
const releaseNotes = `First line\n${'r'.repeat(9_989)}`
|
||||
sharedVersion.name = longName
|
||||
sharedVersion.description = `説明 ${'d'.repeat(512)}`
|
||||
sharedVersion.releaseNotes = releaseNotes
|
||||
sharedVersion.publisher = { userId: 'author_1', organizationId }
|
||||
const skills = installApi(vi.fn())
|
||||
skills.resolveShare.mockResolvedValue({
|
||||
status: 'ok',
|
||||
@@ -158,14 +155,7 @@ describe('SkillInstallDialog', () => {
|
||||
|
||||
await inspectSkill(sharedVersion.description)
|
||||
expect(screen.getByRole('heading', { name: longName })).toBeTruthy()
|
||||
expect(
|
||||
screen.getByText(
|
||||
(_, element) =>
|
||||
element?.tagName === 'P' &&
|
||||
element.textContent ===
|
||||
`Published by Orca user author_1 in organization ${organizationId}.`
|
||||
)
|
||||
).toBeTruthy()
|
||||
expect(screen.queryByText(/Published by Orca user/)).toBeNull()
|
||||
expect(
|
||||
screen.getByText(
|
||||
(_, element) =>
|
||||
|
||||
@@ -178,23 +178,6 @@ export function SkillInstallReview({
|
||||
{translate('auto.components.skills.SkillInstallReviewContent.f72ee4022a', 'SHA-256')}{' '}
|
||||
{version.packageDigest}
|
||||
</p>
|
||||
{version.publisher ? (
|
||||
<p className="break-words text-xs text-muted-foreground">
|
||||
{translate(
|
||||
'auto.components.skills.SkillInstallReviewContent.9daf13c180',
|
||||
'Published by Orca user'
|
||||
)}{' '}
|
||||
{version.publisher.userId}
|
||||
{version.publisher.organizationId
|
||||
? translate(
|
||||
'auto.components.skills.SkillInstallReviewContent.8cedddfcd5',
|
||||
' in organization {{value0}}',
|
||||
{ value0: version.publisher.organizationId }
|
||||
)
|
||||
: ''}
|
||||
.
|
||||
</p>
|
||||
) : null}
|
||||
{version.releaseNotes.trim() ? (
|
||||
<p className="break-words whitespace-pre-wrap text-xs leading-5 text-muted-foreground">
|
||||
{translate(
|
||||
|
||||
@@ -4218,8 +4218,6 @@
|
||||
"2a31912f14": "Orca found",
|
||||
"651b7d8a57": "Local copy needs a decision",
|
||||
"98ed90e523": "A skill contains instructions and may include scripts. Treat it as code from its author.",
|
||||
"8cedddfcd5": " in organization {{value0}}",
|
||||
"9daf13c180": "Published by Orca user",
|
||||
"f72ee4022a": "SHA-256",
|
||||
"3d8421ca2f": "executable",
|
||||
"87137bcb8d": "scripts",
|
||||
@@ -4312,8 +4310,6 @@
|
||||
"01c5a11e04": "{{value0}} scripts",
|
||||
"01c5a11e05": "{{value0}} executable",
|
||||
"01c5a11e06": "SHA-256",
|
||||
"01c5a11e07": "Published by Orca user",
|
||||
"01c5a11e08": " in organization {{value0}}",
|
||||
"01c5a11e09": "Release notes:",
|
||||
"01c5a11e0a": "Skills contain instructions and may include scripts. Treat them as code from their author.",
|
||||
"01c5a11e0b": "Skills to install",
|
||||
|
||||
@@ -24,7 +24,6 @@ export type SkillCloudVersion = {
|
||||
createdAt: string
|
||||
releaseNotes: string
|
||||
manifest: SkillPackageManifestV1 | SkillBundleManifestV1
|
||||
publisher?: { userId: string; organizationId?: string }
|
||||
}
|
||||
|
||||
export type SkillCloudShare = {
|
||||
|
||||
Reference in New Issue
Block a user