mac-compute-space / app /windsurf /patch_plan.py
josephrw's picture
Upload folder using huggingface_hub
c4916b2 verified
Raw
History Blame Contribute Delete
3.9 kB
from typing import Dict, Any, List
def generate_patch_plan() -> Dict[str, Any]:
return {
"stages": [
{
"stage": 1,
"name": "Core gbridge primitive",
"description": "Implement route_capability_call() as the single routing primitive",
"files": ["app/gbridge/router.py"],
"tests": ["test_capability_endpoints.py"],
},
{
"stage": 2,
"name": "Capability leases",
"description": "Implement lease creation, expiration, and endpoint binding",
"files": ["app/gbridge/leases.py", "app/gbridge/capabilities.py"],
"tests": ["test_gbridge_leases.py"],
},
{
"stage": 3,
"name": "Phone worker bridge",
"description": "Implement session creation, worker registration, and job routing",
"files": ["app/phone/sessions.py", "app/phone/workers.py", "app/phone/jobs.py", "app/phone/relay.py"],
"tests": ["test_phone_sessions.py"],
},
{
"stage": 4,
"name": "Receipt system",
"description": "Implement receipt creation, chain hashing, and verification",
"files": ["app/gbridge/receipts.py"],
"tests": ["test_receipts.py"],
},
{
"stage": 5,
"name": "Five pages",
"description": "Build landing, phone, gbridge, windsurf, and receipts pages",
"files": ["app/pages/landing.py", "app/pages/phone.py", "app/pages/gbridge.py", "app/pages/windsurf.py", "app/pages/receipts.py"],
"tests": [],
},
{
"stage": 6,
"name": "Windsurf integration",
"description": "Implement packet generation, MCP manifest, and ingest endpoint",
"files": ["app/windsurf/packet.py", "app/windsurf/mcp_export.py", "app/windsurf/ingest.py"],
"tests": ["test_windsurf_packet.py", "test_mcp_manifest.py"],
},
{
"stage": 7,
"name": "API wiring",
"description": "Wire all API routes into main.py",
"files": ["app/api/routes_*.py", "app/main.py"],
"tests": [],
},
],
"regression_checks": [
"All existing tests still pass",
"No secrets in source",
"No mocked inference without capability_unavailable fallback",
"Receipt chain is unbroken",
],
}
def prioritize_patch_steps(steps: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
return sorted(steps, key=lambda s: s.get("priority", 99))
def generate_acceptance_criteria() -> List[str]:
return [
"Landing page renders at /",
"Phone bridge renders at /phone",
"gbridge explorer renders at /gbridge",
"Windsurf page renders at /windsurf",
"Receipts page renders at /receipts",
"/api/manifest returns product metadata",
"/api/gbridge/session creates session",
"/worker opens with session token",
"Worker WebSocket connects",
"Worker advertises at least one capability",
"/cap/{capability_name} creates routed job",
"Job returns result",
"Receipt is created",
"Receipt verifies",
"/api/windsurf/packet returns valid build packet",
"/api/windsurf/mcp returns MCP-style tool manifest",
]
def generate_regression_checks() -> List[str]:
return [
"No hardcoded secrets",
"No mocked inference without fallback",
"Receipt chain unbroken",
"All pages render without 500",
"WebSocket connections close cleanly",
]