transfer_prev_nested_conj
previous’s body must be a single atom, so a conjunction has to be
parenthesized. This policy permits an Drupe::Action::"Transfer" only when
the immediately preceding event (within 2h) was a Login by the same user
(input.user: context.input.user) and to server "s1"
(input.server: "s1") — both conditions grouped inside the parentheses that
form previous’s single-atom body.
Schema lifted from the temporal_only corpus case
0268_previous_containing_nested (Login with user+server input, plus
Transfer). Default event schema.
Referenced by guide/04-temporal-expressions.
Policy
// `previous`'s body is an atom, so a conjunction must be parenthesized. Permit
// a Transfer only if the immediately preceding event (within 2h) was a Login
// by the same user AND to server "s1".
@id("transfer_after_prev_login_s1")
permit (
principal,
action == Drupe::Action::"Transfer",
resource
)
when temporal {
previous within 2h (
Drupe::Action::"Login"::request{ input.user: context.input.user }
&& Drupe::Action::"Login"::request{ input.server: "s1" }
)
};
Schema
namespace Drupe {
type ContentFilterFinding = {
severityScore: decimal
};
type LoginInput = {
server: String,
user: String
};
type LoginOutput = { };
type PromptAttackFinding = {
severityScore: decimal
};
type SensitiveInfoFinding = {
confidenceScore: decimal
};
type SystemContext = {
now: datetime
};
type TransferInput = {
amount: Long,
user: String
};
type TransferOutput = { };
entity Gateway;
entity IamEntity = {
id: String
};
entity OAuthUser = {
id: String
} tags String;
entity UnauthenticatedUser;
action "CallTool" in [Action::"Mcp"] appliesTo {
principal: [OAuthUser, IamEntity, UnauthenticatedUser],
resource: [Gateway],
context: {
system: SystemContext
}
};
action "Http" appliesTo {
principal: [OAuthUser, IamEntity, UnauthenticatedUser],
resource: [Gateway],
context: {
system: SystemContext
}
};
action "InvokeAgent" in [Action::"Http"] appliesTo {
principal: [OAuthUser, IamEntity, UnauthenticatedUser],
resource: [Gateway],
context: {
input?: { },
system: SystemContext
}
};
action "InvokeLLM" in [Action::"Http"] appliesTo {
principal: [OAuthUser, IamEntity, UnauthenticatedUser],
resource: [Gateway],
context: {
input?: { },
system: SystemContext
}
};
action "Login" in [Action::"CallTool"] appliesTo {
principal: [IamEntity, OAuthUser, UnauthenticatedUser],
resource: [Gateway],
context: {
input: LoginInput,
output?: LoginOutput,
system: SystemContext
}
};
action "Mcp" appliesTo {
principal: [OAuthUser, IamEntity, UnauthenticatedUser],
resource: [Gateway],
context: {
system: SystemContext
}
};
action "Transfer" in [Action::"CallTool"] appliesTo {
principal: [IamEntity, OAuthUser, UnauthenticatedUser],
resource: [Gateway],
context: {
input: TransferInput,
output?: TransferOutput,
system: SystemContext
}
};
action "UnknownTool" in [Action::"CallTool"] appliesTo {
principal: [OAuthUser, IamEntity, UnauthenticatedUser],
resource: [Gateway],
context: {
system: SystemContext
}
};
}