Status
approved
PRYAJA3 Approval
Human gate for repo writes, promotion gates and other risky actions. Decisions are sent to the canonical target API.
Current decision status and linked runtime entities.
Approve, request changes or reject. The API keeps approval, run, checkpoint and audit state in sync.
Canonical execution controls for approved repo writes, promotion gates and checkpoint resume. Destructive steps still pass through the target API policy layer.
The proposal or gated action that requires a human decision.
Post-approval execution state, verification lineage and promotion readiness.
{
"decision": {
"status": "approved",
"actor": "synthetic-live-proof",
"comment": "approved for isolated workspace verification",
"decided_at": "2026-04-12T17:28:28.673161+00:00"
},
"execution": {
"status": "applied_verified",
"executed_at": "2026-04-12T17:29:55.332594+00:00",
"workspace_path": "/isolated-workspaces/approval-45eb96ea8825-20260412T172955Z",
"report_path": "/isolated-workspaces/approval-45eb96ea8825-20260412T172955Z/approval-apply-report.json",
"patch_path": "/isolated-workspaces/approval-45eb96ea8825-20260412T172955Z/proposed.patch",
"report": {
"approval_id": "approval-45eb96ea8825",
"run_id": "run-239c3690",
"task_id": "task-f91c7ad0",
"status": "applied_verified",
"executed_at": "2026-04-12T17:29:55.332594+00:00",
"source_workspace_root": "/workspace",
"isolated_workspace_root": "/isolated-workspaces/approval-45eb96ea8825-20260412T172955Z",
"proposal": {
"title": "Synthetic comment-only patch",
"summary": "Insert a harmless comment into test_openproject_webhook.py for apply-lane verification.",
"target_files": [
"apps/api/tests/test_openproject_webhook.py"
],
"validation_plan": [
"Run apps/api/tests/test_openproject_webhook.py in the isolated workspace."
],
"readiness": "proposal_ready",
"confidence": 0.99
},
"patch": {
"artifact_uri": "urn:pryaja3:artifact:code-patch-proposal:run-239c3690:PATCH-2",
"has_unified_diff": true,
"patch_path": "/isolated-workspaces/approval-45eb96ea8825-20260412T172955Z/proposed.patch",
"result": {
"status": "applied",
"selected_strip": 1,
"dry_run_attempts": [
{
"ok": true,
"exit_code": 0,
"strip": 1,
"argv": [
"patch",
"--dry-run",
"--batch",
"--forward",
"-p1",
"--input",
"/isolated-workspaces/approval-45eb96ea8825-20260412T172955Z/proposed.patch"
],
"started_at": "2026-04-12T17:29:55.332773+00:00",
"finished_at": "2026-04-12T17:29:55.335426+00:00",
"stdout_preview": "checking file apps/api/tests/test_openproject_webhook.py",
"stderr_preview": ""
}
],
"apply_result": {
"ok": true,
"exit_code": 0,
"strip": 1,
"argv": [
"patch",
"--batch",
"--forward",
"-p1",
"--input",
"/isolated-workspaces/approval-45eb96ea8825-20260412T172955Z/proposed.patch"
],
"started_at": "2026-04-12T17:29:55.335463+00:00",
"finished_at": "2026-04-12T17:29:55.339421+00:00",
"stdout_preview": "patching file apps/api/tests/test_openproject_webhook.py",
"stderr_preview": ""
}
}
},
"tests": {
"status": "passed",
"results": [
{
"path": "apps/api/tests/test_openproject_webhook.py",
"command": [
"python3",
"-m",
"unittest",
"discover",
"-s",
"apps/api/tests",
"-p",
"test_openproject_webhook.py",
"-v"
],
"pythonpath": "apps/api",
"start_dir": "apps/api/tests",
"status": "passed",
"exit_code": 0,
"started_at": "2026-04-12T17:29:55.339646+00:00",
"finished_at": "2026-04-12T17:29:57.234751+00:00",
"stdout_preview": "",
"stderr_preview": "test_normalize_openproject_webhook_builds_task_brief_and_forced_thread_binding (test_openproject_webhook.OpenProjectWebhookTests.test_normalize_openproject_webhook_builds_task_brief_and_forced_thread_binding) ... ok test_normalize_openproject_webhook_keeps_engineering_bug_in_development_mode_even_with_analysis_language (test_openproject_webhook.OpenProjectWebhookTests.test_normalize_openproject_webhook_keeps_engineering_bug_in_development_mode_even_with_analysis_language) ... ok test_webhook_endpoint_queues_once_and_deduplicates_repeated_event (test_openproject_webhook.OpenProjectWebhookTests.test_webhook_endpoint_queues_once_and_deduplicates_repeated_event) ... {\"level\": \"INFO\", \"logger\": \"app.main\", \"message\": \"request finished\", \"service\": \"pryaja3-target-api\", \"timestamp_ms\": 1776014997004} {\"level\": \"INFO\", \"logger\": \"httpx\", \"message\": \"HTTP Request: POST http://testserver/v1/board/openproject/webhook \\\"HTTP/1.1 200 OK\\\"\", \"service\": \"pryaja3-target-api\", \"timestamp_ms\": 1776014997007} {\"level\": \"INFO\", \"logger\": \"app.main\", \"message\": \"request finished\", \"service\": \"pryaja3-target-api\", \"timestamp_ms\": 1776014997012} {\"level\": \"INFO\", \"logger\": \"httpx\", \"message\": \"HTTP Request: POST http://testserver/v1/board/openproject/webhook \\\"HTTP/1.1 200 OK\\\"\", \"service\": \"pryaja3-target-api\", \"timestamp_ms\": 1776014997013} ok test_webhook_endpoint_rejects_payload_without_work_package (test_openproject_webhook.OpenProjectWebhookTests.test_webhook_endpoint_rejects_payload_without_work_package) ... {\"level\": \"INFO\", \"logger\": \"app.main\", \"message\": \"request finished\", \"service\": \"pryaja3-target-api\", \"timestamp_ms\": 1776014997017} {\"level\": \"INFO\", \"logger\": \"httpx\", \"message\": \"HTTP Request: POST http://testserver/v1/board/openproject/webhook \\\"HTTP/1.1 400 Bad Request\\\"\", \"service\": \"pryaja3-target-api\", \"timestamp_ms\": 1776014997018} ok ---------------------------------------------------------------------- Ran 4 tests in 0.032s OK"
}
]
}
}
},
"promotion": {
"state": "completed",
"ready_for_merge": false,
"summary": "Archived obsolete smoke/recovery/system-test entry; not actionable for the user.",
"source": "self",
"root_run_id": "run-239c3690",
"source_run_id": "run-239c3690",
"task_id": "task-f91c7ad0",
"task_title": "Synthetic approval apply proof",
"approval_state": "archived",
"approval_execution_parent_run_id": null,
"review_readiness": null,
"engineering_readiness": null,
"tests_overall_status": null,
"tests_count": 0,
"requirements": [],
"promotion_execution_state": null,
"promotion_execution_executed_at": null,
"promotion_execution_workspace_path": null,
"promotion_execution_target_root": null,
"promotion_execution_report_path": null,
"promotion_execution_diff_path": null,
"promotion_bundle_artifact_ids": [],
"updated_at": "2026-04-17T15:15:46.960347Z",
"completed_at": "2026-04-17T15:15:46.960347Z"
},
"lineage": {
"root_run_id": "run-239c3690",
"child_runs": [],
"approval_related_runs": []
}
}Patch proposals, execution outputs, approval state artifacts and verification reports.
Low-level request JSON for audit and debugging.
{
"approval_id": "approval-45eb96ea8825",
"required": true,
"status": "approved",
"approval_kind": "repo_write_apply",
"title": "Synthetic apply approval",
"summary": "Execute synthetic isolated workspace patch application.",
"reason": "Controlled approval for live isolated workspace verification.",
"artifact_uri": "urn:pryaja3:artifact:code-patch-proposal:run-239c3690:PATCH-2",
"proposal_readiness": "proposal_ready",
"decision_options": [
"approve",
"reject",
"needs_changes"
],
"resume_supported": true,
"tool_name": "code.patch",
"step_id": "PATCH-2",
"decision": {
"status": "approved",
"actor": "synthetic-live-proof",
"comment": "approved for isolated workspace verification",
"decided_at": "2026-04-12T17:28:28.673161+00:00"
},
"execution": {
"status": "applied_verified",
"executed_at": "2026-04-12T17:29:55.332594+00:00",
"workspace_path": "/isolated-workspaces/approval-45eb96ea8825-20260412T172955Z",
"report_path": "/isolated-workspaces/approval-45eb96ea8825-20260412T172955Z/approval-apply-report.json",
"patch_path": "/isolated-workspaces/approval-45eb96ea8825-20260412T172955Z/proposed.patch",
"report": {
"approval_id": "approval-45eb96ea8825",
"run_id": "run-239c3690",
"task_id": "task-f91c7ad0",
"status": "applied_verified",
"executed_at": "2026-04-12T17:29:55.332594+00:00",
"source_workspace_root": "/workspace",
"isolated_workspace_root": "/isolated-workspaces/approval-45eb96ea8825-20260412T172955Z",
"proposal": {
"title": "Synthetic comment-only patch",
"summary": "Insert a harmless comment into test_openproject_webhook.py for apply-lane verification.",
"target_files": [
"apps/api/tests/test_openproject_webhook.py"
],
"validation_plan": [
"Run apps/api/tests/test_openproject_webhook.py in the isolated workspace."
],
"readiness": "proposal_ready",
"confidence": 0.99
},
"patch": {
"artifact_uri": "urn:pryaja3:artifact:code-patch-proposal:run-239c3690:PATCH-2",
"has_unified_diff": true,
"patch_path": "/isolated-workspaces/approval-45eb96ea8825-20260412T172955Z/proposed.patch",
"result": {
"status": "applied",
"selected_strip": 1,
"dry_run_attempts": [
{
"ok": true,
"exit_code": 0,
"strip": 1,
"argv": [
"patch",
"--dry-run",
"--batch",
"--forward",
"-p1",
"--input",
"/isolated-workspaces/approval-45eb96ea8825-20260412T172955Z/proposed.patch"
],
"started_at": "2026-04-12T17:29:55.332773+00:00",
"finished_at": "2026-04-12T17:29:55.335426+00:00",
"stdout_preview": "checking file apps/api/tests/test_openproject_webhook.py",
"stderr_preview": ""
}
],
"apply_result": {
"ok": true,
"exit_code": 0,
"strip": 1,
"argv": [
"patch",
"--batch",
"--forward",
"-p1",
"--input",
"/isolated-workspaces/approval-45eb96ea8825-20260412T172955Z/proposed.patch"
],
"started_at": "2026-04-12T17:29:55.335463+00:00",
"finished_at": "2026-04-12T17:29:55.339421+00:00",
"stdout_preview": "patching file apps/api/tests/test_openproject_webhook.py",
"stderr_preview": ""
}
}
},
"tests": {
"status": "passed",
"results": [
{
"path": "apps/api/tests/test_openproject_webhook.py",
"command": [
"python3",
"-m",
"unittest",
"discover",
"-s",
"apps/api/tests",
"-p",
"test_openproject_webhook.py",
"-v"
],
"pythonpath": "apps/api",
"start_dir": "apps/api/tests",
"status": "passed",
"exit_code": 0,
"started_at": "2026-04-12T17:29:55.339646+00:00",
"finished_at": "2026-04-12T17:29:57.234751+00:00",
"stdout_preview": "",
"stderr_preview": "test_normalize_openproject_webhook_builds_task_brief_and_forced_thread_binding (test_openproject_webhook.OpenProjectWebhookTests.test_normalize_openproject_webhook_builds_task_brief_and_forced_thread_binding) ... ok test_normalize_openproject_webhook_keeps_engineering_bug_in_development_mode_even_with_analysis_language (test_openproject_webhook.OpenProjectWebhookTests.test_normalize_openproject_webhook_keeps_engineering_bug_in_development_mode_even_with_analysis_language) ... ok test_webhook_endpoint_queues_once_and_deduplicates_repeated_event (test_openproject_webhook.OpenProjectWebhookTests.test_webhook_endpoint_queues_once_and_deduplicates_repeated_event) ... {\"level\": \"INFO\", \"logger\": \"app.main\", \"message\": \"request finished\", \"service\": \"pryaja3-target-api\", \"timestamp_ms\": 1776014997004} {\"level\": \"INFO\", \"logger\": \"httpx\", \"message\": \"HTTP Request: POST http://testserver/v1/board/openproject/webhook \\\"HTTP/1.1 200 OK\\\"\", \"service\": \"pryaja3-target-api\", \"timestamp_ms\": 1776014997007} {\"level\": \"INFO\", \"logger\": \"app.main\", \"message\": \"request finished\", \"service\": \"pryaja3-target-api\", \"timestamp_ms\": 1776014997012} {\"level\": \"INFO\", \"logger\": \"httpx\", \"message\": \"HTTP Request: POST http://testserver/v1/board/openproject/webhook \\\"HTTP/1.1 200 OK\\\"\", \"service\": \"pryaja3-target-api\", \"timestamp_ms\": 1776014997013} ok test_webhook_endpoint_rejects_payload_without_work_package (test_openproject_webhook.OpenProjectWebhookTests.test_webhook_endpoint_rejects_payload_without_work_package) ... {\"level\": \"INFO\", \"logger\": \"app.main\", \"message\": \"request finished\", \"service\": \"pryaja3-target-api\", \"timestamp_ms\": 1776014997017} {\"level\": \"INFO\", \"logger\": \"httpx\", \"message\": \"HTTP Request: POST http://testserver/v1/board/openproject/webhook \\\"HTTP/1.1 400 Bad Request\\\"\", \"service\": \"pryaja3-target-api\", \"timestamp_ms\": 1776014997018} ok ---------------------------------------------------------------------- Ran 4 tests in 0.032s OK"
}
]
}
}
},
"responsible_agent": "Engineer Agent",
"responsible_role": "engineer",
"responsibility_source": "plan_step_role"
}