Files
openclaw/src/secrets/runtime-shared.test.ts
Peter Steinberger 8a5c8690e1 fix(secrets): keep unaffected owners live during reload failures (#110779)
* fix(secrets): isolate reload failures per owner

* refactor(secrets): split runtime activation helpers

* fix(secrets): export web warning type

* fix(secrets): reject unsafe degraded config writes

* fix(secrets): derive reload defaults type

* fix(secrets): defer reload state publication

* fix(secrets): preserve partial refresh state

* fix(secrets): retry superseded reload preflight

* fix(secrets): bind stale credentials to owner contracts

* fix(secrets): scope degraded credential contracts

* fix(secrets): restore source ownership guards

* fix(secrets): recover provider-only degradation

* fix(secrets): enforce degraded reload contracts

* fix(secrets): preserve scoped reload state

* fix(secrets): reconcile deferred descendant state

* fix(secrets): commit reload state atomically

* fix(secrets): preserve source transaction lineage

* test(secrets): use non-secret lineage marker

* chore(plugin-sdk): refresh API baseline

* fix(secrets): canonicalize web owner contracts

* fix(plugin-sdk): preserve legacy secret owner contracts

* fix(secrets): satisfy startup activation types

* test(secrets): align reload fixtures with owner contracts

* refactor(secrets): move source recovery scope helper

* fix(secrets): preserve owner contracts on web failures

* fix(secrets): bind legacy web resolution contract

* fix(secrets): retry stale auth publication
2026-07-18 18:29:24 +01:00

27 lines
913 B
TypeScript

import { describe, expect, it } from "vitest";
import { collectRuntimeSecretInputAssignment, createResolverContext } from "./runtime-shared.js";
describe("runtime secret assignments", () => {
it("keeps legacy plugin owners without contracts conservatively unbound", () => {
const context = createResolverContext({ sourceConfig: {}, env: {} });
collectRuntimeSecretInputAssignment({
value: { source: "env", provider: "default", id: "FIXTURE_LEGACY" },
path: "plugins.entries.example.config.apiKey",
expected: "string",
defaults: undefined,
context,
owner: {
ownerKind: "capability",
ownerId: "example",
requiredForGateway: false,
disposition: "isolate",
},
apply: () => undefined,
});
expect(context.assignments).toHaveLength(1);
expect(context.assignments[0]?.ownerContractDigest).toBeUndefined();
});
});