diff --git a/.ai/shots/backend_route.py b/.ai/shots/backend_route.py index b67a4767..f1d40a2d 100644 --- a/.ai/shots/backend_route.py +++ b/.ai/shots/backend_route.py @@ -1,10 +1,9 @@ #[DEF:BackendRouteShot:Module] -# @TIER: STANDARD +# @COMPLEXITY: 3 # @SEMANTICS: Route, Task, API, Async # @PURPOSE: Reference implementation of a task-based route using GRACE-Poly. # @LAYER: Interface (API) -# @RELATION: IMPLEMENTS -> [DEF:Std:API_FastAPI] -# @INVARIANT: TaskManager must be available in dependency graph. +# @RELATION: [IMPLEMENTS] ->[API_FastAPI] from typing import Dict, Any from fastapi import APIRouter, Depends, HTTPException, status @@ -25,15 +24,13 @@ class CreateTaskRequest(BaseModel): # [/DEF:CreateTaskRequest:Class] # [DEF:create_task:Function] +# @COMPLEXITY: 4 # @PURPOSE: Create and start a new task using TaskManager. Non-blocking. -# @DATA_CONTRACT: Input -> CreateTaskRequest, Output -> Task +# @RELATION: [CALLS] ->[task_manager.create_task] # @PRE: plugin_id must match a registered plugin. # @POST: A new task is spawned; Task object returned immediately. # @SIDE_EFFECT: Writes to DB, Triggers background worker. -# -# @UX_STATE: Success -> 201 Created -# @UX_STATE: Error(Validation) -> 400 Bad Request -# @UX_STATE: Error(System) -> 500 Internal Server Error +# @DATA_CONTRACT: Input -> CreateTaskRequest, Output -> Task @router.post("/tasks", response_model=Task, status_code=status.HTTP_201_CREATED) async def create_task( request: CreateTaskRequest, diff --git a/.ai/shots/critical_module.py b/.ai/shots/critical_module.py index 8a72e130..4fb390b3 100644 --- a/.ai/shots/critical_module.py +++ b/.ai/shots/critical_module.py @@ -1,9 +1,9 @@ # [DEF:TransactionCore:Module] -# @TIER: CRITICAL +# @COMPLEXITY: 5 # @SEMANTICS: Finance, ACID, Transfer, Ledger # @PURPOSE: Core banking transaction processor with ACID guarantees. # @LAYER: Domain (Core) -# @RELATION: DEPENDS_ON -> [DEF:Infra:PostgresDB] +# @RELATION: [DEPENDS_ON] ->[PostgresDB] # # @INVARIANT: Total system balance must remain constant (Double-Entry Bookkeeping). # @INVARIANT: Negative transfers are strictly forbidden. @@ -33,14 +33,13 @@ class TransferResult(NamedTuple): new_balance: Decimal # [DEF:execute_transfer:Function] +# @COMPLEXITY: 5 # @PURPOSE: Atomically move funds between accounts with audit trails. -# @DATA_CONTRACT: Input -> (sender_id: str, receiver_id: str, amount: Decimal), Output -> TransferResult +# @RELATION: [CALLS] ->[atomic_transaction] # @PRE: amount > 0; sender != receiver; sender_balance >= amount. # @POST: sender_balance -= amount; receiver_balance += amount; Audit Record Created. # @SIDE_EFFECT: Database mutation (Rows locked), Audit IO. -# -# @UX_STATE: Success -> Returns 200 OK + Transaction Receipt. -# @UX_STATE: Error(LowBalance) -> 422 Unprocessable -> UI shows "Top-up needed" modal. +# @DATA_CONTRACT: Input -> (sender_id: str, receiver_id: str, amount: Decimal), Output -> TransferResult def execute_transfer(sender_id: str, receiver_id: str, amount: Decimal) -> TransferResult: # Guard: Input Validation (Вне belief_scope, так как это trivial проверка) if amount <= Decimal("0.00"): @@ -54,7 +53,6 @@ def execute_transfer(sender_id: str, receiver_id: str, amount: Decimal) -> Trans logger.reason("Initiating transfer", extra={"from": sender_id, "to": receiver_id, "amount": amount}) try: - # @RELATION: CALLS -> atomic_transaction with atomic_transaction(): current_balance = get_balance(sender_id, for_update=True) diff --git a/.ai/shots/frontend_component.svelte b/.ai/shots/frontend_component.svelte index c4dcf4f3..9478ebb2 100644 --- a/.ai/shots/frontend_component.svelte +++ b/.ai/shots/frontend_component.svelte @@ -1,18 +1,27 @@