2626 RUNTIME_CONFIRMED ,
2727 RUNTIME_INCONCLUSIVE ,
2828 RUNTIME_NOT_REPRODUCED ,
29- RUNTIME_UNSAFE ,
3029 ProbeArtifact ,
3130 RuntimeFinding ,
3231 RuntimeVerdict ,
@@ -779,7 +778,7 @@ def make_plan(self, finding: RuntimeFinding) -> VerificationPlan:
779778 "Live verification was explicitly enabled." ,
780779 "Runtime profile preflight completed successfully." ,
781780 "The agent may run the project only in the copied sandbox workspace." ,
782- "External side effects require declared mocks or staging targets ." ,
781+ "Live verification uses configured staging, sandbox, mock, local, or loopback resources ." ,
783782 ],
784783 probe = {
785784 "kind" : "agent_led_live_verification" ,
@@ -791,7 +790,6 @@ def make_plan(self, finding: RuntimeFinding) -> VerificationPlan:
791790 "confirmed_runtime" : "The agent reproduced the unsafe behavior with live evidence." ,
792791 "not_reproduced" : "The live system rejected or prevented the unsafe behavior." ,
793792 "inconclusive_runtime" : "The agent could not reach a reliable runtime conclusion." ,
794- "unsafe_to_test" : "The required reproduction would touch undeclared external side effects." ,
795793 },
796794 )
797795
@@ -819,19 +817,6 @@ def verify(self, finding: RuntimeFinding, out_dir: Path) -> RuntimeVerdict:
819817 plan ,
820818 "runtime environment preflight failed; see verify/RUNTIME-SETUP.md" ,
821819 )
822- elif _unsafe_without_mock (self .profile , finding ):
823- verdict = RuntimeVerdict (
824- finding_id = finding .id ,
825- title = finding .title ,
826- plugin = self .name ,
827- status = RUNTIME_UNSAFE ,
828- confidence = "medium" ,
829- evidence = [
830- "The finding appears to require an external or destructive side effect." ,
831- "The runtime profile does not declare a safe mock or staging target for that effect." ,
832- ],
833- plan = plan .to_dict (),
834- )
835820 else :
836821 try :
837822 verdict = self ._run_live_agent (finding , finding_dir , plan )
@@ -1237,29 +1222,6 @@ def _route_from_files(files: list[str]) -> str | None:
12371222 return None
12381223
12391224
1240- def _unsafe_without_mock (profile : AppRuntimeProfile , finding : RuntimeFinding ) -> bool :
1241- text = " " .join (
1242- [
1243- finding .title ,
1244- finding .category ,
1245- finding .exploit_scenario ,
1246- * finding .evidence ,
1247- * finding .files ,
1248- ]
1249- ).lower ()
1250- external_keys = {
1251- "stripe" : ("stripe" , "billing" , "charge" , "payment" , "payout" ),
1252- "email" : ("email" , "smtp" , "sendgrid" , "mailgun" ),
1253- "aws" : ("aws" , "s3" , "ses" , "sns" , "sqs" ),
1254- "webhook" : ("webhook" , "ssrf" , "callback" , "outbound" ),
1255- "production" : ("production" , "prod data" , "real customer" ),
1256- }
1257- for mock_name , needles in external_keys .items ():
1258- if any (needle in text for needle in needles ) and not profile .mocks .get (mock_name ):
1259- return True
1260- return False
1261-
1262-
12631225def _local_pi_env (app : EphemeralAppSandbox , agent_cfg : dict [str , object ]) -> dict [str , str ]:
12641226 env = app .env ()
12651227 env ["PI_OFFLINE" ] = "1"
@@ -1347,11 +1309,10 @@ def _live_agent_system_prompt() -> str:
13471309Hard requirements:
13481310- Do not modify the original source checkout. Work only inside /work/repo and /work/artifacts.
13491311- Do not fix code, commit code, open PRs, or make unrelated changes.
1350- - Do not contact real third-party services, production systems, billing providers, email providers,
1351- cloud storage, webhook targets, or customer data unless the runtime profile explicitly declares a
1352- safe mock or staging target.
1353- - Prefer local tests, scripts, seeded data, local services, and loopback targets.
1354- - If reproduction would be destructive or external, return unsafe_to_test.
1312+ - Use only the configured staging, sandbox, mock, local, or loopback resources. Do not contact
1313+ production systems or real customer data.
1314+ - Prefer local tests, scripts, seeded data, local services, and loopback targets when they provide
1315+ reliable evidence.
13551316- Output exactly one <runtime_verdict_json>...</runtime_verdict_json> object.
13561317"""
13571318
@@ -1384,7 +1345,7 @@ def _live_agent_prompt(profile: AppRuntimeProfile, finding: RuntimeFinding) -> s
13841345Write any supporting evidence under /work/artifacts. Return only:
13851346<runtime_verdict_json>
13861347{{
1387- "status": "confirmed_runtime|not_reproduced|inconclusive_runtime|blocked|unsafe_to_test ",
1348+ "status": "confirmed_runtime|not_reproduced|inconclusive_runtime|blocked",
13881349 "confidence": "high|medium|low",
13891350 "evidence": [
13901351 "what you ran",
0 commit comments