fix: restore the credential-rejected branch and admit SRC absence by key
Review follow-ups that are logic rather than documentation: - rpc.schema.ts had lost the credential-rejected branch while api-proxy.ts still returns that code, so a legitimate business error failed the client's response parse. Restore the branch and assert it. - rpc-schemas.spec.ts had lost the workspace list, archiveSession and insertSessionBefore cases along with the command schemas; those routes still ship, so restore their coverage. - An omitted SRC field is now recognized by an absent key instead of an undefined value, which makes the allowance assertExactArguments already granted reachable; an explicitly undefined field stays invalid input. A weak descriptor's undefined result rides the wire as an absent value, matching the envelope removal. - The chooser unmounts an already-created backend when the surface entry fails to load, and no longer reverses the captured id array in place.
This commit is contained in:
@@ -72,11 +72,8 @@ export async function apply(ctx: Context): Promise<void> {
|
||||
// backend lands first: the surface's browser half drives the capability
|
||||
// the backend registers.
|
||||
const ids: string[] = []
|
||||
for (const name of [BACKEND_PACKAGES[backend], SURFACE_PACKAGES[backend]]) {
|
||||
ids.push(await ctx.loader.create({ name }))
|
||||
}
|
||||
return async () => {
|
||||
for (const id of ids.reverse()) {
|
||||
const unmount = async () => {
|
||||
for (const id of [...ids].reverse()) {
|
||||
// Tree teardown (group.stop) can have removed the entry already;
|
||||
// nothing is left to unmount or await then.
|
||||
if (ctx.loader.store[id] === undefined) continue
|
||||
@@ -85,5 +82,17 @@ export async function apply(ctx: Context): Promise<void> {
|
||||
await ctx.loader.remove(id)
|
||||
}
|
||||
}
|
||||
try {
|
||||
for (const name of [BACKEND_PACKAGES[backend], SURFACE_PACKAGES[backend]]) {
|
||||
ids.push(await ctx.loader.create({ name }))
|
||||
}
|
||||
} catch (cause) {
|
||||
// Setup owns the entries it created until it returns the disposer: leaving
|
||||
// the backend mounted would make a retry collide with its own
|
||||
// directoryPicker registration.
|
||||
await unmount()
|
||||
throw cause
|
||||
}
|
||||
return unmount
|
||||
}, 'directory-picker-auto: interaction entries')
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user