feat(web): Agent Platform Port — Paperclip behind a single import seam (R2, G12, #111)
יוצר web/agent_platform_port.py כמודול היחיד שמייבא web.paperclip_client/paperclip_api. app.py מייבא כעת אך-ורק מה-Port — 0 imports ישירים של paperclip_* (היפוך-תלות פנימה, Ports & Adapters / Dependency Rule). החלפת-הפלטפורמה = מימוש-מחדש של מודול אחד. שתי שכבות ב-Port: (א) side-effects של מחזור-חיים נחשפים גם בשם-דומיין (archive_case_project/restore/create/notify_case_status — אירועי-הדומיין המומלצים לקוד חדש); (ב) פעולות issue/interaction/comment/agent — re-export בשם pc_* (קריאות API, לא אירועים). מעבר מלא לפעלי-דומיין = follow-up; ה-import seam (החלק הניתן-לאכיפה ב-G12) מוחזק בכל מקרה. שינוי import-only באתרי-הקריאה — אפס שינוי-התנהגות, regression מינימלי. אימות: app.py 0 imports ישירים; py_compile OK; כל 23 הסמלים נפתרים מה-Port; domain-aliases identity-wired; test_paperclip_access_guard 5 passed. Invariants: G12 (שער-הפלטפורמה — seam יחיד), G2 (מקור-אמת יחיד למגע-פלטפורמה). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
46
web/app.py
46
web/app.py
@@ -47,28 +47,32 @@ from web.mcp_env_catalog import (
|
||||
normalize_for_compare,
|
||||
)
|
||||
from web.progress_store import ProgressStore
|
||||
from web.paperclip_api import emit_case_status_webhook, pc_request, require_paperclip_db_url
|
||||
from web.paperclip_client import (
|
||||
COMPANIES as PAPERCLIP_COMPANIES,
|
||||
accept_interaction as pc_accept_interaction,
|
||||
archive_project as pc_archive_project,
|
||||
create_project as pc_create_project,
|
||||
create_workflow_issue as pc_create_workflow_issue,
|
||||
get_agents_for_case as pc_get_agents_for_case,
|
||||
get_agents_for_company as pc_get_agents,
|
||||
get_case_issues as pc_get_case_issues,
|
||||
get_issue_comments as pc_get_issue_comments,
|
||||
get_issue_interactions as pc_get_issue_interactions,
|
||||
# Agent platform access goes through the Platform Port ONLY (INV-G12 / X15) —
|
||||
# app.py never imports web.paperclip_client / web.paperclip_api directly.
|
||||
from web.agent_platform_port import (
|
||||
PAPERCLIP_COMPANIES,
|
||||
emit_case_status_webhook,
|
||||
get_project_url,
|
||||
post_comment as pc_post_comment,
|
||||
reject_interaction as pc_reject_interaction,
|
||||
respond_to_interaction as pc_respond_to_interaction,
|
||||
restore_project as pc_restore_project,
|
||||
wake_analyst_for_appraiser_facts as pc_wake_analyst_for_appraiser_facts,
|
||||
wake_ceo_agent as pc_wake_ceo,
|
||||
wake_ceo_for_feedback_fold as pc_wake_ceo_for_feedback_fold,
|
||||
wake_curator_for_final as pc_wake_curator_for_final,
|
||||
wake_for_precedent_extraction as pc_wake_for_precedent_extraction,
|
||||
pc_accept_interaction,
|
||||
pc_archive_project,
|
||||
pc_create_project,
|
||||
pc_create_workflow_issue,
|
||||
pc_get_agents,
|
||||
pc_get_agents_for_case,
|
||||
pc_get_case_issues,
|
||||
pc_get_issue_comments,
|
||||
pc_get_issue_interactions,
|
||||
pc_post_comment,
|
||||
pc_reject_interaction,
|
||||
pc_request,
|
||||
pc_respond_to_interaction,
|
||||
pc_restore_project,
|
||||
pc_wake_analyst_for_appraiser_facts,
|
||||
pc_wake_ceo,
|
||||
pc_wake_ceo_for_feedback_fold,
|
||||
pc_wake_curator_for_final,
|
||||
pc_wake_for_precedent_extraction,
|
||||
require_paperclip_db_url,
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user