Skip to content
Draft
Show file tree
Hide file tree
Changes from 13 commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
70ae35d
test(integration): define host delivery origin authority
seonghobae Aug 13, 2026
7395874
feat(integration): own exact plugin delivery origin authority
seonghobae Aug 13, 2026
a3aff39
fix(integration): resolve delivery authority from durable installation
seonghobae Aug 13, 2026
b70f972
test(integration): reject malformed origin grant evidence
seonghobae Aug 13, 2026
845e6b7
fix(integration): sanitize malformed origin grant evidence
seonghobae Aug 13, 2026
1e80b6e
chore(branch): refresh PR #205 against protected main
seonghobae Aug 13, 2026
60ac829
test(integration): cover delivery-origin fail-closed branches
seonghobae Aug 13, 2026
94389af
test(integration): restore delivery-origin baseline
seonghobae Aug 13, 2026
3f103b0
fix(integration): validate delivery origin before persistence I/O
seonghobae Aug 13, 2026
04dae43
test(integration): cover delivery-origin fail-closed branches
seonghobae Aug 13, 2026
a3d9c9f
test(integration): reject direct IP delivery origins
seonghobae Aug 14, 2026
24e363b
fix(integration): reject direct IP delivery origins
seonghobae Aug 14, 2026
b8d31ca
Merge branch 'main' into feat/plugin-delivery-origin-authority-v3
opencode-agent[bot] Aug 22, 2026
8b62182
fix(integration): remove unreachable origin guard
seonghobae Sep 1, 2026
2205689
docs(integration): record delivery-origin authority
seonghobae Sep 1, 2026
739f4bc
docs(architecture): define plugin delivery authority
seonghobae Sep 1, 2026
c66e383
test(integration): reject malformed delivery grant inputs
seonghobae Sep 1, 2026
92cbfe0
fix(integration): validate delivery grant request shape
seonghobae Sep 1, 2026
3adf293
test(integration): reject normalized delivery-origin paths
seonghobae Sep 1, 2026
a43074f
fix(integration): reject normalized delivery-origin paths
seonghobae Sep 1, 2026
016040c
style(changelog): restore formatted newline
seonghobae Sep 1, 2026
beb1b9a
docs(integration): explain delivery-origin prefilter
seonghobae Sep 1, 2026
f71de75
Merge branch 'main' into feat/plugin-delivery-origin-authority-v3
opencode-agent[bot] Sep 2, 2026
8e89cca
chore: adopt current protected main into plugin delivery authority
seonghobae Sep 3, 2026
015f19e
chore: adopt current protected main into plugin delivery authority
seonghobae Sep 3, 2026
9044a29
test(integration): reject non-canonical durable grant UUIDs
seonghobae Sep 3, 2026
9a7f86d
test(integration): use casing-sensitive durable grant fixture
seonghobae Sep 3, 2026
5e6a2b6
fix(integration): reject normalized durable UUID evidence
seonghobae Sep 3, 2026
3e61c3c
test(integration): reject future delivery-origin grant evidence
seonghobae Sep 3, 2026
30a3ef4
fix(integration): bound delivery-origin replay grant time
seonghobae Sep 3, 2026
df4e7fa
test(integration): reject impossible installation time evidence
seonghobae Sep 3, 2026
9f41c75
fix(integration): validate installation time before origin grant
seonghobae Sep 3, 2026
3959d75
test(integration): bound delivery-origin lifecycle time evidence
seonghobae Sep 3, 2026
021e3fd
fix(integration): enforce delivery-origin lifecycle time bounds
seonghobae Sep 3, 2026
2bf8cef
test(integration): reject future delivery-origin reads
seonghobae Sep 3, 2026
b930041
fix(integration): reject future delivery-origin read evidence
seonghobae Sep 3, 2026
a39e861
test(integration): reject active origin after installation revocation
seonghobae Sep 3, 2026
76d6871
fix(integration): fence active origin reads after installation revoca…
seonghobae Sep 3, 2026
ac20002
docs(architecture): fence origin authority after installation revocation
seonghobae Sep 3, 2026
13847f6
docs(changelog): record installation revocation fence
seonghobae Sep 3, 2026
9cba31e
test(integration): reject malformed delivery-origin read evidence
seonghobae Sep 3, 2026
664d7fb
fix(integration): distinguish malformed grant read evidence
seonghobae Sep 3, 2026
73bd06d
test(integration): reject malformed plugin delivery context
seonghobae Sep 3, 2026
301c888
fix(integration): bound malformed delivery authority context
seonghobae Sep 3, 2026
3a00502
chore(integration): adopt merged runner-control foundation
seonghobae Sep 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import { describe, expect, it } from 'vitest';
import type { PluginInstallationRecord } from './plugin-installation';
import {
PluginDeliveryOriginAuthority,
PluginDeliveryOriginAuthorityError,
type PluginDeliveryOriginGrantRecord,
type PluginDeliveryOriginGrantStore,
} from './plugin-delivery-origin-authority';

const WORKSPACE_ID = '11111111-1111-4111-8111-111111111111';
const USER_ID = '22222222-2222-4222-8222-222222222222';
const INSTALLATION_ID = '33333333-3333-4333-8333-333333333333';
const GRANT_ID = '44444444-4444-4444-8444-444444444444';
const NOW = new Date('2026-08-12T06:00:00.000Z');

const ACTIVE_INSTALLATION: PluginInstallationRecord = Object.freeze({
installationId: INSTALLATION_ID,
workspaceId: WORKSPACE_ID,
installedByUserId: USER_ID,
pluginId: 'com.example.calendar',
pluginContractVersion: '1.0.0',
manifestSha256: 'a'.repeat(64),
grantedCapabilities: Object.freeze(['calendar.updated']),
status: 'active',
installedAt: '2026-08-12T05:00:00.000Z',
revokedAt: null,
});

function storeReturning(
durableEvidence: unknown,
): PluginDeliveryOriginGrantStore {
return {
async createIfAbsent(): Promise<PluginDeliveryOriginGrantRecord> {
return durableEvidence as PluginDeliveryOriginGrantRecord;
},
async findById(): Promise<PluginDeliveryOriginGrantRecord | undefined> {
return undefined;
},
async revokeActive(): Promise<
PluginDeliveryOriginGrantRecord | undefined
> {
return undefined;
},
};
}

describe('Plugin delivery-origin durable evidence', () => {
it.each([undefined, null])(
'converts malformed create evidence %s into the fixed authority failure',
async (durableEvidence) => {
const subject = new PluginDeliveryOriginAuthority(
storeReturning(durableEvidence),
{
async findById(): Promise<PluginInstallationRecord> {
return ACTIVE_INSTALLATION;
},
},
() => NOW,
);

await expect(
subject.grant(
{ workspaceId: WORKSPACE_ID, actorUserId: USER_ID },
INSTALLATION_ID,
{ grantId: GRANT_ID, origin: 'https://api.example.com' },
),
).rejects.toBeInstanceOf(PluginDeliveryOriginAuthorityError);
},
);
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
import { describe, expect, it, vi } from 'vitest';
import type { PluginInstallationRecord } from './plugin-installation';
import {
PluginDeliveryOriginAuthority,
PluginDeliveryOriginAuthorityError,
type PluginDeliveryOriginGrantRecord,
} from './plugin-delivery-origin-authority';

const WORKSPACE_ID = '11111111-1111-4111-8111-111111111111';
const USER_ID = '22222222-2222-4222-8222-222222222222';
const INSTALLATION_ID = '33333333-3333-4333-8333-333333333333';
const GRANT_ID = '44444444-4444-4444-8444-444444444444';

function activeInstallation(): PluginInstallationRecord {
return Object.freeze({
installationId: INSTALLATION_ID,
workspaceId: WORKSPACE_ID,
installedByUserId: USER_ID,
pluginId: 'com.example.calendar',
pluginContractVersion: '1.0.0',
manifestSha256: 'a'.repeat(64),
grantedCapabilities: Object.freeze(['calendar.updated']),
status: 'active',
installedAt: '2026-08-12T05:00:00.000Z',
revokedAt: null,
});
}

function authority() {
const createIfAbsent = vi.fn(
async (candidate: PluginDeliveryOriginGrantRecord) => candidate,
);
const findInstallationById = vi.fn(async () => activeInstallation());
return {
createIfAbsent,
findInstallationById,
subject: new PluginDeliveryOriginAuthority(
{
createIfAbsent,
findById: vi.fn(async () => undefined),
revokeActive: vi.fn(async () => undefined),
},
{ findById: findInstallationById },
() => new Date('2026-08-12T06:00:00.000Z'),
),
};
}

describe('PluginDeliveryOriginAuthority direct-IP boundary', () => {
it.each([
'https://8.8.8.8',
'https://127.0.0.1',
'https://[::1]',
'https://[::ffff:127.0.0.1]',
])('rejects direct IP delivery origins before installation I/O: %s', async (origin) => {
const fixture = authority();

await expect(
fixture.subject.grant(
{ workspaceId: WORKSPACE_ID, actorUserId: USER_ID },
INSTALLATION_ID,
{ grantId: GRANT_ID, origin },
),
).rejects.toBeInstanceOf(PluginDeliveryOriginAuthorityError);

expect(fixture.findInstallationById).not.toHaveBeenCalled();
expect(fixture.createIfAbsent).not.toHaveBeenCalled();
});
});
Loading
Loading