# [DEF:Std:Plugin:Standard]
# @COMPLEXITY: 5
# @PURPOSE: Standards for building and integrating Plugins.
# @LAYER: Domain (Plugin)
# @INVARIANT: All plugins MUST inherit from `PluginBase`.
# @INVARIANT: All plugins MUST be located in `backend/src/plugins/`.

## 1. PLUGIN CONTRACT
Every plugin must implement the following properties and methods:
*   `id`: Unique string (e.g., `"my-plugin"`).
*   `name`: Human-readable name.
*   `description`: Brief purpose.
*   `version`: Semantic version.
*   `get_schema()`: Returns JSON schema for input validation.
*   `execute(params: Dict[str, Any], context: TaskContext)`: Core async logic.

## 2. STRUCTURED LOGGING (TASKCONTEXT)
Plugins MUST use `TaskContext` for logging to ensure proper source attribution:
*   **Source Attribution:** Use `context.logger.with_source("src_name")` for specific operations (e.g., `"superset_api"`, `"git"`, `"llm"`).
*   **Levels:**
    *   `DEBUG`: Detailed diagnostics (API responses).
    *   `INFO`: Operational milestones (start/end).
    *   `WARNING`: Recoverable issues.
    *   `ERROR`: Failures stopping execution.
*   **Progress:** Use `context.logger.progress("msg", percent=XX)` for long-running tasks.

## 3. BEST PRACTICES
1. **Asynchronous Execution:** Always use `async/await` for I/O operations.
2. **Schema Validation:** Ensure the `get_schema()` precisely matches the `execute()` input expectations.
3. **Isolation:** Plugins should be self-contained and not depend on other plugins directly. Use core services (`ConfigManager`, `TaskManager`) via dependency injection or the provided `context`.

# [/DEF:Std:Plugin:Standard]
