AI Agent 驱动的开源可自部署视频工作台:将小说与剧本转为角色、场景、道具资产、分镜、视频和剪映草稿,支持跨镜头一致性、多供应商与费用追踪 | Self-hosted AI video workspace for stories, storyboards and short-form video production
This report summarizes scanner evidence for ArcReel/ArcReel, a Python project with 5,431 GitHub stars. SynthScan examined 719,754 lines of code across 3227 source files, recording 14942 pattern matches distributed across 21 syntactic categories. The legacy adjusted pattern signal is 23.1 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 12206 finding(s).
Are imports declared and package/API names verified? 1342 finding(s).
Are wrappers, guards, and repeated structures necessary? 13239 finding(s).
Which changes need focused human review? 14942 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 14942 distinct pattern matches across 21 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/e2e/regions/onboarding.spec.ts | 49 | async function expectPopoverBesideAnchor(page: Page) { | CODE |
| LOW | frontend/src/api.ts | 297 | function normalizeDiagnosticsBucket(value: unknown): { code: string; message: string; location?: string }[] { | CODE |
| LOW | frontend/src/api.ts | 316 | function normalizeImportFailureDiagnostics(value: unknown): ImportFailureDiagnostics { | CODE |
| LOW | frontend/src/api.ts | 325 | function normalizeExportDiagnostics(value: unknown): ExportDiagnostics { | CODE |
| LOW | frontend/src/test/factories.ts | 136 | export function makeReferenceUnitCapability( | CODE |
| LOW | frontend/src/stores/app-store.ts | 41 | function readPersistedAssistantPanelWidth(): number { | CODE |
| LOW | frontend/src/stores/app-store.ts | 54 | function readPersistedAssistantPanelOpen(): boolean | null { | CODE |
| LOW | frontend/src/stores/app-store.ts | 64 | function persistAssistantPanelOpen(open: boolean): void { | CODE |
| LOW | frontend/src/stores/app-store.ts | 157 | function buildWorkspaceNotification( | CODE |
| LOW | frontend/src/stores/tasks-store.ts | 192 | function pruneSupersededOptimistic(tasks: TaskItem[], marks: ReadonlySet<string>): Set<string> { | CODE |
| LOW | frontend/src/stores/tasks-store.ts | 500 | export function selectLatestTaskByResource( | CODE |
| LOW | frontend/src/stores/tasks-store.ts | 596 | export function selectHasActiveTaskForScriptFile( | CODE |
| LOW | frontend/src/stores/tasks-store.ts | 648 | export function useHasActiveTaskForScriptFile( | CODE |
| LOW | frontend/src/utils/anthropic-url.ts | 16 | export function normalizeAnthropicBaseUrl(raw: string): string { | CODE |
| LOW | frontend/src/utils/anthropic-url.ts | 34 | export function hasUnsupportedUrlComponents(raw: string): boolean { | CODE |
| LOW | frontend/src/utils/provider-models.ts | 228 | export function lookupEndpointConstraints( | CODE |
| LOW | frontend/src/utils/entry-projection.ts | 567 | export function collectCommittedMessageIds(entries: TimelineEntry[]): Set<string> { | CODE |
| LOW | frontend/src/utils/project-changes.ts | 168 | export function formatGroupedNotificationText( | CODE |
| LOW | frontend/src/utils/project-changes.ts | 187 | export function formatGroupedDeferredText( | CODE |
| LOW | frontend/src/components/ui/questionnaire.tsx | 142 | function QuestionnaireChoiceDescription({ | CODE |
| LOW | frontend/src/components/ui/chart.tsx | 353 | function getPayloadConfigFromPayload( | CODE |
| LOW | …c/components/layout/ScriptGenerationNoticeListener.tsx | 8 | export function ScriptGenerationNoticeListener() { | CODE |
| LOW | frontend/src/components/layout/workspace-layout.ts | 60 | export function sidebarAutoCollapseReason(location: string, compact: boolean): "compact" | "episodes" | null { | CODE |
| LOW | frontend/src/components/usage/usage-test-utils.tsx | 7 | export function renderUsageRecordsSection(search = "section=usage") { | CODE |
| LOW | frontend/src/components/shared/LayeredModelFields.tsx | 59 | export function useGenerationTypeBucketLabels(): Record<GenerationTypeBucket, { label: string; caption?: string }> { | CODE |
| LOW | …d/src/components/shared/EpisodeTargetDurationField.tsx | 20 | export function isValidEpisodeTargetDuration(value: number | null): boolean { | CODE |
| LOW | …d/src/components/shared/EpisodeTargetDurationField.tsx | 34 | export function EpisodeTargetDurationField({ value, onChange }: EpisodeTargetDurationFieldProps) { | CODE |
| LOW | …d/src/components/shared/VideoModelUnresolvedNotice.tsx | 11 | export function VideoModelUnresolvedNotice({ projectName }: { projectName: string }) { | CODE |
| LOW | …src/components/shared/ScriptOverwriteConfirmDialog.tsx | 35 | export function ScriptOverwriteConfirmDialog({ | CODE |
| LOW | …/src/components/canvas/episodes/episodes-view-model.ts | 100 | export function isReservedEpisodeFileName(filename: string): boolean { | CODE |
| LOW | …tend/src/components/canvas/shared/text-task-failure.ts | 22 | export function latestEpisodeTextTaskFailure( | CODE |
| LOW | …nd/src/components/canvas/shared/PlanDurationSelect.tsx | 16 | export function durationIncompatibleLabel( | CODE |
| LOW | …c/components/canvas/shared/prompt-authoring-handoff.ts | 13 | export function promptAuthoringHandoffText(t: TFunction, handoff: PromptAuthoringHandoff): string { | CODE |
| LOW | …mponents/canvas/lorebook/useStaleRegenerateConfirm.tsx | 38 | export function useStaleRegenerateConfirm({ | CODE |
| LOW | …mponents/canvas/lorebook/CharacterDerivativesField.tsx | 36 | export function CharacterDerivativesField({ | CODE |
| LOW | …onents/canvas/lorebook/useCharacterDerivativeSheets.ts | 13 | export function useCharacterDerivativeSheets( | CODE |
| LOW | …/src/components/canvas/timeline/VersionTimeMachine.tsx | 53 | function getImagePreviewHeightClass( | CODE |
| LOW | …src/components/canvas/timeline/TimelineCanvas.test.tsx | 257 | function renderWithAllWriteHandlers() { | CODE |
| LOW | …s/canvas/reference/ReferenceScriptPlanPreviewPanel.tsx | 427 | export function ReferenceScriptPlanPreviewPanel({ | CODE |
| LOW | …ts/canvas/reference/ReferenceDurationConfirmDialog.tsx | 65 | export function ReferenceDurationConfirmDialog({ open, items, onConfirm, onCancel }: Props) { | CODE |
| LOW | …nts/canvas/reference/ReferenceBatchAdmissionDialog.tsx | 51 | export function ReferenceBatchAdmissionDialog({ admission, onConfirm, onClose }: Props) { | CODE |
| LOW | …ponents/canvas/reference/PromptAuthoringDraftPanel.tsx | 31 | function narrowPromptAuthoringDraft(content: Record<string, unknown> | null): PromptAuthoringDraft | null { | CODE |
| LOW | …ponents/canvas/reference/PromptAuthoringDraftPanel.tsx | 80 | export function PromptAuthoringDraftPanel({ projectName, episode, view, onSettled }: PromptAuthoringDraftPanelProps) { | CODE |
| LOW | …ntend/src/components/pages/CreateProjectModal.test.tsx | 82 | function stubModelVideoCapabilities() { | CODE |
| LOW | …/pages/settings/endpoints/endpoint-form-primitives.tsx | 34 | export function VariableInsertionProvider({ children }: { children: React.ReactNode }) { | CODE |
| LOW | …ages/settings/endpoints/ComfyuiEndpointTestSection.tsx | 92 | export function ComfyuiEndpointTestSection({ definition, providers, blocked }: ComfyuiEndpointTestSectionProps) { | CODE |
| LOW | frontend/src/hooks/useTaskFailureNotifications.ts | 24 | export function useTaskFailureNotifications(projectName?: string | null): void { | CODE |
| LOW | frontend/src/hooks/useScriptGenerationNotice.ts | 29 | export function useScriptGenerationNotice(): void { | CODE |
| LOW | frontend/src/hooks/useScriptReviewDraft.ts | 24 | function isScriptPlanConfirmedError(err: unknown): boolean { | CODE |
| LOW | frontend/src/hooks/useAssistantSession.ts | 910 | function getPendingQuestionFromEvent(payload: Record<string, unknown>): PendingQuestion | null { | CODE |
| LOW | frontend/src/hooks/useScrollTarget.ts | 24 | function scrollIntoViewUntilSettled(el: HTMLElement): () => void { | CODE |
| LOW | frontend/src/hooks/useAssetSheetBatchNotifications.ts | 22 | export function useAssetSheetBatchNotifications(projectName?: string | null): void { | CODE |
| LOW | frontend/src/actions/generation.ts | 216 | export async function enqueueCharacterDerivative( | CODE |
| LOW | frontend/src/actions/generation.ts | 231 | export async function enqueueCharacterVoiceSample( | CODE |
| LOW | frontend/src/actions/generation.ts | 345 | export async function enqueueReferenceVideoUnit( | CODE |
| LOW | frontend/src/actions/generation.ts | 367 | export async function enqueueReferenceVideoBatch( | CODE |
| LOW | frontend/src/actions/generation.ts | 447 | export function promptAuthoringResourceId(episode: number): string { | CODE |
| LOW | frontend/src/actions/generation.ts | 564 | export async function enqueueEpisodeReplanContinue(projectName: string, candidateId: string): Promise<EnqueueResult> { | CODE |
| LOW | frontend/src/api/errors.ts | 235 | export function isReferenceProjectionAdmission(value: unknown): value is ReferenceProjectionAdmission { | CODE |
| LOW | …bsite/src/theme/ThemeProvider/TitleFormatter/index.tsx | 10 | export default function ThemeProviderTitleFormatter({ children }: Props): ReactNode { | CODE |
| 11761 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …tend/src/components/shared/ModelConfigSection.test.tsx | 892 | // ── 联动约束:分辨率 / 参考图路径收窄可选时长 ────────────────── | COMMENT |
| MEDIUM | tests/conftest.py | 306 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/conftest.py | 308 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/conftest.py | 526 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/conftest.py | 528 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/conftest.py | 546 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/conftest.py | 548 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/conftest.py | 740 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/conftest.py | 742 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/conftest.py | 757 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/conftest.py | 759 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/conftest.py | 774 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/conftest.py | 776 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_public_contract.py | 12 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_public_contract.py | 14 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_public_contract.py | 39 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_public_contract.py | 41 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_public_contract.py | 82 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_public_contract.py | 84 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_public_contract.py | 106 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_public_contract.py | 108 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/server/routers/test_market_entries_api.py | 117 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/server/routers/test_market_entries_api.py | 119 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/server/routers/test_market_entries_api.py | 200 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/server/routers/test_market_entries_api.py | 202 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/server/routers/test_market_entries_api.py | 241 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/server/routers/test_market_entries_api.py | 243 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/server/routers/test_system_config_router.py | 111 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/server/routers/test_system_config_router.py | 113 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/server/routers/test_system_config_router.py | 25 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/server/routers/test_system_config_router.py | 27 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/server/routers/test_system_config_router.py | 298 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/server/routers/test_system_config_router.py | 300 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/server/routers/test_custom_endpoints_api.py | 104 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/server/routers/test_custom_endpoints_api.py | 106 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/server/routers/test_custom_endpoints_api.py | 277 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/server/routers/test_custom_endpoints_api.py | 279 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/server/routers/test_custom_endpoints_api.py | 412 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/server/routers/test_custom_endpoints_api.py | 414 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/server/routers/test_custom_endpoints_api.py | 25 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/server/routers/test_custom_endpoints_api.py | 27 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/server/routers/test_agent_config_router.py | 82 | # ── Task 10: /agent/credentials CRUD ───────────────────────────── | COMMENT |
| MEDIUM | tests/unit/server/routers/test_agent_config_router.py | 52 | # ── Task 9: GET /agent/preset-providers ─────────────────────────── | COMMENT |
| MEDIUM | tests/unit/server/routers/test_agent_config_router.py | 366 | # ── Task 11: POST /agent/credentials/{id}/activate ──────────────── | COMMENT |
| MEDIUM | tests/unit/server/routers/test_providers_api.py | 28 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/server/routers/test_providers_api.py | 30 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/server/routers/test_providers_api.py | 49 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/server/routers/test_providers_api.py | 51 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/server/routers/test_providers_api.py | 322 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/server/routers/test_providers_api.py | 324 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/server/routers/test_providers_api.py | 545 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/server/routers/test_providers_api.py | 547 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/server/routers/test_providers_api.py | 713 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/server/routers/test_providers_api.py | 715 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/server/routers/test_system_config_options.py | 56 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/server/routers/test_system_config_options.py | 58 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/server/routers/test_system_config_options.py | 274 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/server/routers/test_system_config_options.py | 276 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/server/routers/test_system_config_options.py | 382 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/server/routers/test_system_config_options.py | 384 | # --------------------------------------------------------------------------- | COMMENT |
| 529 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …kills/adapt-custom-endpoint/scripts/custom_endpoint.py | 4 | CODE | |
| LOW | tests/conftest.py | 20 | CODE | |
| LOW | tests/legacy_project_shapes.py | 8 | CODE | |
| LOW | tests/http_capture.py | 8 | CODE | |
| LOW | tests/factories.py | 3 | CODE | |
| LOW | tests/fakes.py | 7 | CODE | |
| LOW | tests/mutmut_plugin.py | 18 | CODE | |
| LOW | tests/speech_contract_cases.py | 3 | CODE | |
| LOW | tests/unit/test_frontend_mcp_tool_i18n.py | 11 | CODE | |
| LOW | tests/unit/test_instruction_terminology.py | 9 | CODE | |
| LOW | tests/unit/test_edit_video_review_contract.py | 7 | CODE | |
| LOW | tests/unit/test_frontend_task_type_i18n.py | 28 | CODE | |
| LOW | tests/unit/test_frontend_skill_i18n.py | 14 | CODE | |
| LOW | tests/unit/server/test_request_logging_middleware.py | 3 | CODE | |
| LOW | tests/unit/server/test_frontend_mount.py | 3 | CODE | |
| LOW | tests/unit/server/test_tool_runtime.py | 1 | CODE | |
| LOW | tests/unit/server/test_auth_kill_switch.py | 3 | CODE | |
| LOW | …ts/unit/server/test_session_store_startup_migration.py | 3 | CODE | |
| LOW | tests/unit/server/test_draft_repair.py | 3 | CODE | |
| LOW | tests/unit/server/test_cors_config.py | 3 | CODE | |
| LOW | tests/unit/server/test_startup_assertions.py | 3 | CODE | |
| LOW | tests/unit/server/routers/test_comfyui_inference_api.py | 7 | CODE | |
| LOW | …nit/server/routers/test_discover_anthropic_fallback.py | 3 | CODE | |
| LOW | tests/unit/server/routers/test_market_entries_api.py | 3 | CODE | |
| LOW | tests/unit/server/routers/test_system_config_router.py | 8 | CODE | |
| LOW | tests/unit/server/routers/test_custom_endpoints_api.py | 6 | CODE | |
| LOW | tests/unit/server/routers/test_script_review_errors.py | 3 | CODE | |
| LOW | tests/unit/server/routers/test_agent_config_router.py | 3 | CODE | |
| LOW | tests/unit/server/routers/test_providers_api.py | 8 | CODE | |
| LOW | tests/unit/server/routers/test_openai_connection.py | 7 | CODE | |
| LOW | tests/unit/server/routers/test_system_config_options.py | 8 | CODE | |
| LOW | tests/unit/server/routers/test_endpoint_tests_api.py | 6 | CODE | |
| LOW | tests/unit/server/routers/test_custom_providers_api.py | 7 | CODE | |
| LOW | …s/unit/server/routers/test_custom_providers_comfyui.py | 7 | CODE | |
| LOW | tests/unit/server/routers/test_file_responses.py | 3 | CODE | |
| LOW | tests/unit/server/routers/test_system_logs_router.py | 3 | CODE | |
| LOW | tests/unit/server/routers/test_market_sources_api.py | 3 | CODE | |
| LOW | tests/unit/server/routers/test_system_version_api.py | 1 | CODE | |
| LOW | tests/unit/server/media_tools/test_context.py | 3 | CODE | |
| LOW | …t/server/agent_runtime/test_session_manager_sandbox.py | 7 | CODE | |
| LOW | …/unit/server/agent_runtime/test_sdk_0_1_76_features.py | 8 | CODE | |
| LOW | tests/unit/server/agent_runtime/test_session_actor.py | 7 | CODE | |
| LOW | …/agent_runtime/test_session_manager_store_injection.py | 3 | CODE | |
| LOW | …/unit/server/agent_runtime/test_agent_startup_error.py | 14 | CODE | |
| LOW | …ts/unit/server/agent_runtime/test_options_assembler.py | 8 | CODE | |
| LOW | tests/unit/server/agent_runtime/test_event_log.py | 3 | CODE | |
| LOW | …r/agent_runtime/test_session_manager_sdk_session_id.py | 3 | CODE | |
| LOW | tests/unit/server/agent_runtime/test_sdk_frames.py | 8 | CODE | |
| LOW | tests/unit/server/agent_runtime/test_keyed_locks.py | 3 | CODE | |
| LOW | …/agent_runtime/test_session_manager_init_session_id.py | 3 | CODE | |
| LOW | tests/unit/server/agent_runtime/test_entry_pipeline.py | 3 | CODE | |
| LOW | tests/unit/server/agent_runtime/test_entry_stream.py | 3 | CODE | |
| LOW | …/unit/server/agent_runtime/test_agent_access_policy.py | 6 | CODE | |
| LOW | …unit/server/services/tasks/test_reference_video_e2e.py | 13 | CODE | |
| LOW | …ver/services/tasks/test_reference_video_e2e_backend.py | 7 | CODE | |
| LOW | …ts/unit/server/services/tasks/test_execute_tts_task.py | 5 | CODE | |
| LOW | …erver/services/tasks/test_execute_voice_sample_task.py | 4 | CODE | |
| LOW | …erver/services/tasks/test_generation_tasks_dispatch.py | 1 | CODE | |
| LOW | …sts/unit/server/services/tasks/test_resume_executor.py | 10 | CODE | |
| LOW | …r/services/admission/test_storyboard_item_screening.py | 3 | CODE | |
| 1215 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/legacy_project_shapes.py | 1254 | __all__ = [ | CODE |
| LOW⚡ | tests/unit/server/routers/test_system_config_router.py | 68 | async def _set_setting(key: str, value: str) -> None: | CODE |
| LOW⚡ | tests/unit/server/routers/test_system_config_router.py | 78 | async def _set_video_poll_timeout_seconds(value: int) -> None: | CODE |
| LOW | …sts/unit/server/services/tasks/test_resume_executor.py | 43 | def update_scene_asset(self, **kwargs: Any) -> None: | CODE |
| LOW⚡ | …nit/server/services/project/test_narration_settings.py | 13 | async def _set_globals(db_factory, **settings: str) -> None: | CODE |
| LOW | tests/unit/lib/project/test_asset_rename.py | 345 | def _set_paths(project: dict) -> None: | CODE |
| LOW | tests/unit/lib/project/test_asset_rename.py | 446 | def _set_paths(project: dict) -> None: | CODE |
| LOW | tests/unit/lib/project/test_asset_rename.py | 474 | def _set_paths(project: dict) -> None: | CODE |
| LOW | …gration/server/routers/test_validators_video_bucket.py | 17 | async def _set_default_video_backend(factory: async_sessionmaker[AsyncSession], value: str) -> None: | CODE |
| LOW | …gration/server/routers/test_reference_videos_router.py | 825 | def _set_project_narration(tmp_path: Path, **fields: object) -> None: | CODE |
| LOW | …ration/server/routers/test_market_installations_api.py | 346 | async def _set_index_entry(session_factory: async_sessionmaker[AsyncSession], source_id: int, **fields: object) -> None: | CODE |
| LOW⚡ | …egration/server/services/project/test_script_review.py | 217 | def _set_episode_target_duration(pm: ProjectManager, seconds: int) -> None: | CODE |
| LOW | …egration/server/services/project/test_script_review.py | 134 | def _set_mode(p: dict) -> None: | CODE |
| LOW | …ration/lib/script/test_script_generator_incremental.py | 569 | def _set_entry(project_dir: Path, variant: _Variant, entry_id: str, **fields: Any) -> None: | CODE |
| LOW⚡ | …ect/project_migrations/test_project_migration_v7_v8.py | 940 | def _update_project() -> None: | CODE |
| LOW | …t/project_migrations/test_project_migration_v13_v14.py | 192 | def _set_style_description(project_dir: Path, description: str) -> None: | CODE |
| LOW | server/auth.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/auth.py | 330 | def _set_api_key_cache(key_hash: str, payload: dict | None, expires_at_ts: float | None = None) -> None: | CODE |
| LOW | server/draft_workflow.py | 82 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/draft_repair.py | 44 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/remote_mcp.py | 156 | __all__ = [ | CODE |
| LOW | server/tool_runtime.py | 3777 | __all__ = [ | CODE |
| LOW | server/cors_config.py | 24 | __all__ = ["WILDCARD", "resolve_cors_policy"] | CODE |
| LOW | server/text_generation.py | 120 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/app.py | 299 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/i18n.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/error_handlers.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/auth.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/presentations.py | 100 | __all__ = ["get_presentation_bundle_service", "get_presentation_read_model", "router"] | CODE |
| LOW | server/routers/_source_file_changes.py | 67 | __all__ = ["ensure_no_displaced_tasks", "source_file_change_http_error", "source_file_change_payload"] | CODE |
| LOW | server/routers/project_events.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/files.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/script_review.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/episodes_view.py | 60 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/_episode_source_errors.py | 33 | __all__ = ["episode_source_http_error"] | CODE |
| LOW | server/routers/episode_management.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/generate.py | 58 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/market.py | 58 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/reference_videos.py | 85 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/assistant.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/agent_config.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/cost_estimation.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/end_frames.py | 36 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | server/routers/providers.py | 51 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/_asset_derivatives.py | 45 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/custom_endpoints.py | 52 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/endpoint_tests.py | 74 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/_asset_derivative_status.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/assets.py | 51 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/system_config.py | 51 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/storyboard_batches.py | 168 | __all__ = ["router"] | CODE |
| LOW | server/routers/_batch_admission.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/_batch_admission.py | 58 | __all__ = ["enqueue_failure_payload", "localized_admission_payload"] | CODE |
| LOW | server/routers/_script_edits.py | 102 | __all__ = [ | CODE |
| LOW | server/routers/_asset_router_factory.py | 56 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/versions.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/_source_uploads.py | 60 | __all__ = ["extract_uploaded_source_text", "source_loader_http_error"] | CODE |
| LOW | server/routers/episode_drafts.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/projects.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | server/routers/shot_uploads.py | 44 | logger = logging.getLogger(__name__) | CODE |
| 352 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …sts/unit/lib/generation/test_media_generator_resume.py | 140 | except Exception: | CODE |
| LOW | tests/unit/lib/generation/test_tts_skeleton.py | 168 | except Exception as exc: | CODE |
| LOW | tests/integration/server/derivative_sheet_support.py | 142 | except Exception as exc: | CODE |
| MEDIUM | …s/integration/server/routers/test_end_frames_router.py | 390 | def _target() -> None: | CODE |
| LOW | …s/integration/server/routers/test_end_frames_router.py | 393 | except Exception as exc: # 主线程复述,不能只打印到 stderr | CODE |
| LOW | tests/integration/server/media_tools/test_grid.py | 42 | except Exception as exc: | CODE |
| LOW | tests/integration/server/media_tools/test_grid.py | 53 | except Exception as exc: | CODE |
| LOW | …tion/server/services/tasks/test_formal_image_commit.py | 226 | except Exception as exc: | CODE |
| LOW | …tion/server/services/tasks/test_formal_image_commit.py | 235 | except Exception as exc: | CODE |
| LOW | …on/lib/project/test_project_manager_concurrent_save.py | 260 | except Exception as e: | CODE |
| LOW | …on/lib/project/test_project_manager_concurrent_save.py | 267 | except Exception as e: | CODE |
| MEDIUM | …ect/project_migrations/test_project_migration_v7_v8.py | 589 | def _activate() -> None: | CODE |
| MEDIUM | …ect/project_migrations/test_project_migration_v7_v8.py | 600 | def _write() -> None: | CODE |
| MEDIUM | …ect/project_migrations/test_project_migration_v7_v8.py | 649 | def _write() -> None: | CODE |
| MEDIUM | …ect/project_migrations/test_project_migration_v7_v8.py | 660 | def _compete() -> None: | CODE |
| MEDIUM | …ect/project_migrations/test_project_migration_v7_v8.py | 708 | def _activate() -> None: | CODE |
| MEDIUM | …ect/project_migrations/test_project_migration_v7_v8.py | 1034 | def _save() -> None: | CODE |
| LOW⚡ | …ect/project_migrations/test_project_migration_v7_v8.py | 948 | except Exception as exc: # pragma: no cover - asserted below | CODE |
| LOW | …ect/project_migrations/test_project_migration_v7_v8.py | 597 | except Exception as exc: | CODE |
| LOW | …ect/project_migrations/test_project_migration_v7_v8.py | 604 | except Exception as exc: | CODE |
| LOW | …ect/project_migrations/test_project_migration_v7_v8.py | 657 | except Exception as exc: | CODE |
| LOW | …ect/project_migrations/test_project_migration_v7_v8.py | 664 | except Exception as exc: | CODE |
| LOW | …ect/project_migrations/test_project_migration_v7_v8.py | 713 | except Exception as exc: | CODE |
| LOW | …ect/project_migrations/test_project_migration_v7_v8.py | 726 | except Exception as exc: | CODE |
| LOW | …ect/project_migrations/test_project_migration_v7_v8.py | 1037 | except Exception as exc: # pragma: no cover - asserted below | CODE |
| LOW | …egration/lib/generation/test_media_generator_module.py | 134 | except Exception as exc: | CODE |
| LOW | server/auth.py | 404 | except Exception: | CODE |
| MEDIUM | server/auth.py | 400 | def _touch(): | CODE |
| LOW | server/draft_workflow.py | 1267 | except Exception as exc: | CODE |
| LOW | server/draft_workflow.py | 1420 | except Exception as exc: | CODE |
| LOW | server/draft_repair.py | 203 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 433 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 452 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 674 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 939 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 981 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 1269 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 1293 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 1334 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 1354 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 1373 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 1412 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 1429 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 1444 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 1468 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 1562 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 1735 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 1785 | except Exception: | CODE |
| LOW | server/tool_runtime.py | 1796 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 2023 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 2097 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 2117 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 2159 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 2349 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 2827 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 3111 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 3275 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 3537 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 3559 | except Exception as exc: | CODE |
| LOW | server/tool_runtime.py | 3644 | except Exception as exc: | CODE |
| 301 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | tests/unit/lib/backends/image_backends/test_gemini.py | 137 | backend_aistudio._client.aio.models.generate_content.assert_awaited_once() | CODE |
| CRITICAL⚡ | tests/unit/lib/backends/text_backends/test_ark.py | 228 | backend_with_structured._test_client.chat.completions.create.assert_called_once_with( | CODE |
| CRITICAL | tests/unit/lib/backends/text_backends/test_ark.py | 108 | backend._test_client.chat.completions.create.assert_called_once_with( | CODE |
| CRITICAL | tests/unit/lib/backends/text_backends/test_ark.py | 385 | backend_with_structured._test_client.chat.completions.create.assert_called_once() | CODE |
| CRITICAL | tests/unit/lib/backends/text_backends/test_ark.py | 387 | backend_with_structured._openai_client.chat.completions.create.assert_called_once() | CODE |
| CRITICAL | tests/unit/lib/backends/text_backends/test_ark.py | 430 | backend._test_client.chat.completions.create.assert_called_once() | CODE |
| CRITICAL | tests/unit/lib/backends/text_backends/test_ark.py | 554 | backend._openai_client.chat.completions.create.assert_not_called() | CODE |
| CRITICAL | tests/unit/lib/backends/text_backends/test_ark.py | 634 | backend._test_client.chat.completions.create.assert_called_once() | CODE |
| CRITICAL | …b/backends/video_backends/test_video_backend_gemini.py | 190 | gemini_backend._client.aio.models.generate_videos.assert_awaited_once() | CODE |
| CRITICAL | …b/backends/video_backends/test_video_backend_gemini.py | 240 | gemini_backend._client.aio.operations.get.assert_awaited_once_with(pending_op) | CODE |
| CRITICAL | …b/backends/video_backends/test_video_backend_gemini.py | 339 | gemini_backend._client.aio.models.generate_videos.assert_awaited_once() | CODE |
| CRITICAL | …b/backends/video_backends/test_video_backend_gemini.py | 378 | gemini_backend._client.aio.models.generate_videos.assert_awaited_once() | CODE |
| CRITICAL | …b/backends/video_backends/test_video_backend_gemini.py | 682 | gemini_backend._client.aio.operations.get.assert_awaited_once_with(rebuilt_op) | CODE |
| CRITICAL | …/lib/backends/video_backends/test_video_backend_ark.py | 269 | ark_backend._client.content_generation.tasks.create.assert_not_called() | CODE |
| CRITICAL | …/lib/backends/video_backends/test_video_backend_ark.py | 285 | ark_backend._client.content_generation.tasks.create.assert_not_called() | CODE |
| CRITICAL | …ackends/video_backends/test_gemini_video_resolution.py | 105 | backend._client.aio.models.generate_videos.assert_not_awaited() | CODE |
| CRITICAL | …ackends/video_backends/test_gemini_video_resolution.py | 126 | backend._client.aio.models.generate_videos.assert_not_awaited() | CODE |
| CRITICAL | …ackends/video_backends/test_gemini_video_resolution.py | 145 | backend._client.aio.models.generate_videos.assert_awaited_once() | CODE |
| CRITICAL | …ackends/video_backends/test_gemini_video_resolution.py | 174 | backend._client.aio.models.generate_videos.assert_not_awaited() | CODE |
| CRITICAL | …ackends/video_backends/test_gemini_video_resolution.py | 219 | backend._client.aio.models.generate_videos.assert_awaited_once() | CODE |
| CRITICAL | …ackends/video_backends/test_gemini_video_resolution.py | 236 | backend._client.aio.models.generate_videos.assert_awaited_once() | CODE |
| CRITICAL | lib/backends/audio_backends/openai.py | 139 | async with self._client.audio.speech.with_streaming_response.create(**kwargs) as response: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …kills/adapt-custom-endpoint/scripts/custom_endpoint.py | 205 | CODE | |
| LOW | tests/legacy_project_shapes.py | 1177 | CODE | |
| LOW | tests/unit/lib/artifacts/test_version_manager.py | 587 | CODE | |
| LOW | tests/unit/lib/script/grid/test_grid_manager.py | 308 | CODE | |
| LOW | tests/integration/server/agent_tool_support.py | 293 | CODE | |
| LOW | …/integration/server/routers/projects_router_support.py | 306 | CODE | |
| LOW | …on/server/agent_runtime/test_event_log_session_flow.py | 1688 | CODE | |
| LOW | …erver/services/project/test_project_archive_service.py | 1627 | CODE | |
| LOW | tests/integration/lib/config/test_config_resolver.py | 1040 | CODE | |
| LOW | tests/integration/lib/config/test_config_resolver.py | 1441 | CODE | |
| LOW | …tion/lib/agent/agent_session_store/test_prefix_fork.py | 155 | CODE | |
| LOW | …on/lib/project/test_project_manager_concurrent_save.py | 105 | CODE | |
| LOW | …gration/lib/generation/test_task_failure_capability.py | 127 | CODE | |
| LOW | …gration/lib/generation/test_task_failure_capability.py | 311 | CODE | |
| LOW | …ib/generation/test_generation_worker_capacity_table.py | 39 | CODE | |
| LOW | …tech-doc-style-chinese/scripts/unwrap_md_paragraphs.py | 296 | CODE | |
| LOW | …tech-doc-style-chinese/scripts/unwrap_md_paragraphs.py | 555 | CODE | |
| LOW | …tech-doc-style-chinese/scripts/unwrap_md_paragraphs.py | 618 | CODE | |
| LOW | …ills/tech-doc-style-chinese/scripts/lint_copy_rules.py | 38 | CODE | |
| LOW | …ills/tech-doc-style-chinese/scripts/lint_copy_rules.py | 224 | CODE | |
| LOW | …ills/tech-doc-style-chinese/scripts/lint_copy_rules.py | 438 | CODE | |
| LOW | server/auth.py | 225 | CODE | |
| LOW | server/tool_runtime.py | 1160 | CODE | |
| LOW | server/tool_runtime.py | 1856 | CODE | |
| LOW | server/tool_runtime.py | 3182 | CODE | |
| LOW | server/tool_runtime.py | 3464 | CODE | |
| LOW | server/routers/files.py | 385 | CODE | |
| LOW | server/routers/files.py | 866 | CODE | |
| LOW | server/routers/files.py | 1035 | CODE | |
| LOW | server/routers/files.py | 482 | CODE | |
| LOW | server/routers/files.py | 870 | CODE | |
| LOW | server/routers/system.py | 25 | CODE | |
| LOW | server/routers/episodes_view.py | 226 | CODE | |
| LOW | server/routers/reference_videos.py | 709 | CODE | |
| LOW | server/routers/providers.py | 539 | CODE | |
| LOW | server/routers/assets.py | 325 | CODE | |
| LOW | server/routers/assets.py | 553 | CODE | |
| LOW | server/routers/assets.py | 722 | CODE | |
| LOW | server/routers/_batch_admission.py | 18 | CODE | |
| LOW | server/routers/_asset_router_factory.py | 180 | CODE | |
| LOW | server/routers/_asset_router_factory.py | 202 | CODE | |
| LOW | server/routers/_asset_router_factory.py | 273 | CODE | |
| LOW | server/routers/versions.py | 172 | CODE | |
| LOW | server/routers/projects.py | 399 | CODE | |
| LOW | server/routers/projects.py | 543 | CODE | |
| LOW | server/routers/projects.py | 882 | CODE | |
| LOW | server/routers/projects.py | 991 | CODE | |
| LOW | server/routers/projects.py | 1761 | CODE | |
| LOW | server/routers/projects.py | 1870 | CODE | |
| LOW | server/routers/projects.py | 546 | CODE | |
| LOW | server/routers/projects.py | 995 | CODE | |
| LOW | server/routers/projects.py | 998 | CODE | |
| LOW | server/routers/shot_uploads.py | 50 | CODE | |
| LOW | server/routers/episode_planning.py | 235 | CODE | |
| LOW | server/routers/custom_providers.py | 539 | CODE | |
| LOW | server/routers/custom_providers.py | 1141 | CODE | |
| LOW | server/media_tools/image_edits.py | 214 | CODE | |
| LOW | server/media_tools/video_review.py | 139 | CODE | |
| LOW | server/media_tools/videos.py | 759 | CODE | |
| LOW | server/agent_runtime/session_actor.py | 159 | CODE | |
| 192 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …s/integration/server/agent_toolset/test_draft_tools.py | 897 | except BrokenPipeError: | CODE |
| HIGH | …on/lib/project/test_project_manager_concurrent_save.py | 435 | except KeyError: | CODE |
| HIGH | server/tool_runtime.py | 423 | except ProjectMigrationError: | CODE |
| HIGH | server/tool_runtime.py | 3162 | except TaskNotCancellableError: | CODE |
| HIGH | server/app.py | 357 | except Exception: | CODE |
| HIGH | server/routers/system_config.py | 241 | except Exception: | CODE |
| HIGH | server/routers/custom_providers.py | 554 | except Exception: | CODE |
| HIGH | server/services/project/end_frame.py | 176 | except _RollbackDone: | CODE |
| HIGH | server/services/system/diagnostics.py | 31 | except PackageNotFoundError: | CODE |
| HIGH | server/services/currency/video_artifact_currency.py | 316 | except KeyError: | CODE |
| HIGH | lib/artifacts/artifact_planner.py | 711 | except (TypeError, ValueError): | CODE |
| HIGH | lib/artifacts/artifact_planner.py | 1437 | except (TypeError, ValueError): | CODE |
| HIGH | lib/artifacts/artifact_manifest.py | 1222 | except ArtifactManifestError: | CODE |
| HIGH | lib/artifacts/artifact_manifest.py | 1293 | except FileNotFoundError: | CODE |
| HIGH | lib/artifacts/artifact_manifest.py | 1328 | except FileNotFoundError: | CODE |
| HIGH | lib/infra/env_init.py | 44 | except ImportError: | CODE |
| HIGH | lib/infra/env_init.py | 42 | except OSError: | CODE |
| HIGH | lib/infra/logging_utils.py | 209 | except Exception: | CODE |
| HIGH | lib/infra/logging_utils.py | 215 | except Exception: | CODE |
| HIGH | lib/backends/openai_shared.py | 47 | except ImportError: | CODE |
| HIGH | lib/backends/grok_shared.py | 27 | except ImportError: | CODE |
| HIGH | lib/backends/grok_shared.py | 39 | except ImportError: | CODE |
| HIGH | lib/script/reference_video/execution_checkpoint.py | 395 | except BaseException: | CODE |
| HIGH | lib/script/source_loader/txt.py | 32 | except UnicodeDecodeError: | CODE |
| HIGH | lib/script/source_loader/txt.py | 41 | except (UnicodeDecodeError, LookupError): | CODE |
| HIGH | lib/script/source_loader/pdf.py | 40 | except Exception: | CODE |
| HIGH | lib/script/source_loader/migration.py | 47 | except UnicodeDecodeError: | CODE |
| HIGH | lib/project/project_manager.py | 799 | except ScriptEditError: | CODE |
| HIGH | lib/generation/media_generator.py | 136 | except (ValueError, TypeError): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …t/server/agent_runtime/test_session_manager_sandbox.py | 256 | "python .claude/skills/x/scripts/run.py && python -c \"open('project.json','w')\"", | CODE |
| HIGH | tests/unit/server/agent_runtime/test_turn_schema.py | 143 | """SDK may send {type: text, text: null} — must not TypeError on join.""" | STRING |
| HIGH | tests/unit/lib/artifacts/test_artifact_provenance.py | 28 | == ('{"inputs":{"a":[1,true,null],"z":"雪"},"kind":"structured-content-test","kind_version":2}').encode() | CODE |
| HIGH⚡ | …it/lib/project/test_project_manager_save_validation.py | 238 | '{"episode": 1, "title": "x", "content_mode": "narration", "segments": null, ' | CODE |
| HIGH⚡ | …it/lib/project/test_project_manager_save_validation.py | 250 | '"generation_mode": "reference_video", "video_units": null, ' | CODE |
| HIGH | …ver/services/admission/test_cost_estimation_service.py | 1105 | """单集脏脚本(segments=null)不应让整个项目费用估算 5xx;脏集降级为 0 segments | STRING |
| HIGH⚡ | server/tool_runtime.py | 3359 | value = _coerce_numeric_string(value, int, f"{key} 必须是正整数或 null,收到 {value!r}") | CODE |
| HIGH⚡ | server/tool_runtime.py | 3361 | raise ValueError(f"{key} 必须是正整数或 null,收到 {value!r}") | CODE |
| HIGH⚡ | server/tool_runtime.py | 3368 | f"{MAX_EPISODE_TARGET_DURATION} 秒的整数或 null,收到 {value!r}" | CODE |
| HIGH⚡ | server/tool_runtime.py | 3377 | raise ValueError(f"source_language 必须是 {list(_SOURCE_LANGUAGE_VALUES)} 之一或 null,收到 {value!r}") | CODE |
| HIGH⚡ | server/tool_runtime.py | 3381 | raise ValueError(f"brief 必须是字符串或 null,收到 {value!r}") | CODE |
| HIGH⚡ | server/tool_runtime.py | 3386 | f"character_voice_binding 必须是 {sorted(VALID_CHARACTER_VOICE_BINDINGS)} 之一或 null,收到 {value!r}" | CODE |
| HIGH⚡ | server/tool_runtime.py | 3391 | raise ValueError(f"narration_voice 必须是非空字符串或 null,收到 {value!r}") | CODE |
| HIGH⚡ | server/tool_runtime.py | 3397 | value = _coerce_numeric_string(value, float, f"narration_speed 必须是正的有限数值或 null,收到 {value!r}") | CODE |
| HIGH⚡ | server/tool_runtime.py | 3404 | raise ValueError(f"narration_speed 必须是正的有限数值或 null,收到 {value!r}") | CODE |
| HIGH | server/services/admission/cost_estimation.py | 709 | # Project-level actual costs (characters/scenes/props/products 资产图—— segment_id is null) | COMMENT |
| HIGH | lib/artifacts/artifact_provenance.py | 139 | raise ValueError(f"source_language must be a non-empty string or null, got {source_language!r}") | CODE |
| HIGH | lib/generation/generation_queue_client.py | 343 | # ``or ""`` 而非默认参数:``{"action": null}`` 时 get 返回 None, | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | alembic.ini | 1 | # A generic, single database configuration. | COMMENT |
| LOW | alembic.ini | 21 | prepend_sys_path = . | COMMENT |
| LOW | alembic.ini | 41 | # versions/ directory | COMMENT |
| LOW | alembic.ini | 61 | # 1. Parsing of the version_locations option falls back to using the legacy | COMMENT |
| LOW | pyproject.toml | 121 | COMMENT | |
| LOW | frontend/eslint.config.js | 301 | // 本项目严于 recommended:exhaustive-deps / incompatible-library 一律视为 error | COMMENT |
| LOW | frontend/src/stores/cost-store.ts | 101 | _abortController?.abort(); | COMMENT |
| LOW | frontend/src/stores/capabilities-store.ts | 1 | import { create } from "zustand"; | COMMENT |
| LOW | frontend/src/stores/tasks-store.ts | 101 | queued: 0, running: 0, succeeded: 0, failed: 0, cancelled: 0, total: 0, | COMMENT |
| LOW | frontend/src/stores/tasks-store.ts | 381 | // 派生 selector —— 任务队列两条不变量的单一真相源 | COMMENT |
| LOW | frontend/src/stores/projects-store.ts | 121 | let curResolvers = resolvers; | COMMENT |
| LOW | frontend/src/stores/projects-store.ts | 141 | // 意图就是目标)。反过来,排队者若是持切走前旧项目名的调用方(写操作完成后的 | COMMENT |
| LOW | frontend/src/stores/projects-store.ts | 241 | getAssetFingerprint: (path) => get().assetFingerprints[path] ?? null, | COMMENT |
| LOW | frontend/src/components/copilot/chat/MessageFlow.tsx | 21 | COMMENT | |
| LOW | …d/src/components/copilot/chat/ContentBlockRenderer.tsx | 21 | // text -> TextBlock (markdown) | COMMENT |
| LOW | frontend/src/components/copilot/chat/utils.ts | 1 | import type { ImagePayload, SessionStatus, Turn } from "@/types"; | COMMENT |
| LOW | frontend/src/hooks/useProjectEventsSSE.ts | 221 | } | COMMENT |
| LOW | frontend/src/hooks/useModelCapabilities.ts | 1 | import { useEffect, useRef, useState } from "react"; | COMMENT |
| LOW | frontend/src/onboarding/OnboardingTour.tsx | 81 | !requiredQuery || | COMMENT |
| LOW | tests/unit/lib/script/test_script_editor.py | 141 | script = patch_field(_reference(), "E1U2", "note", "备注") | COMMENT |
| LOW | tests/unit/lib/billing/pricing/test_tts_pricing.py | 81 | # 自定义供应商 audio 计费(按用户填写的每万字符单价)覆盖在 tests/test_custom_cost.py, | COMMENT |
| LOW | …s/skills/diagnosing-bugs/scripts/hitl-loop.template.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .agents/skills/afk-team-workflow/scripts/ledger.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .agents/skills/afk-team-workflow/scripts/ledger.sh | 21 | # retrospective | closed | COMMENT |
| LOW | .agents/skills/afk-team-workflow/scripts/ledger.sh | 41 | # the batch scope (--scope-spec / --scope-issues, enforced below) so recovery can | COMMENT |
| LOW | .agents/skills/pr-ai-review-loop/scripts/round.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | …lls/pr-ai-review-loop/scripts/test_walkthrough_head.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .agents/skills/pr-ai-review-loop/scripts/poll.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .agents/skills/pr-ai-review-loop/scripts/poll.sh | 21 | # rebuilt by re-running poll.sh. query.sh is its only intended reader. | COMMENT |
| LOW | .agents/skills/pr-ai-review-loop/scripts/poll.sh | 41 | # "pr_created_at": "<ISO8601>", # PR createdAt — distinct from last_push_at | COMMENT |
| LOW | .agents/skills/pr-ai-review-loop/scripts/poll.sh | 61 | # "is_paused": <bool>, # CR paused for this PR | COMMENT |
| LOW | .agents/skills/pr-ai-review-loop/scripts/poll.sh | 81 | # "reviews": [{id, submittedAt, state, reviewed_commit, reviewed_current_head, | COMMENT |
| LOW | .agents/skills/pr-ai-review-loop/scripts/poll.sh | 101 | # "checks_failing": [{name, conclusion}], # check runs on current HEAD with a failing-ish conclusion — | COMMENT |
| LOW | .agents/skills/pr-ai-review-loop/scripts/poll.sh | 121 | # review's commit (null = no evidence either way, timestamp rule alone). CR rewrites its | COMMENT |
| LOW | .agents/skills/pr-ai-review-loop/scripts/poll.sh | 141 | # is empty aside from the "## Code Review" heading (any case). Gemini-only; an unmatched | COMMENT |
| LOW | .agents/skills/pr-ai-review-loop/scripts/poll.sh | 161 | # PITFALLS | COMMENT |
| LOW | .agents/skills/pr-ai-review-loop/scripts/poll.sh | 181 | # Leading whitespace is [ \t] only, NOT \s: \s matches \n, which would also register a | COMMENT |
| LOW | .agents/skills/pr-ai-review-loop/scripts/poll.sh | 201 | # means "surface this content", not "reviewed the current HEAD" — head-freshness stays | COMMENT |
| LOW | …/skills/pr-ai-review-loop/scripts/test_quota_alerts.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | …s/skills/pr-ai-review-loop/scripts/classify_commits.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | …s/skills/pr-ai-review-loop/scripts/classify_commits.sh | 21 | # "message_head": "<first line of commit message>", | COMMENT |
| LOW | .agents/skills/pr-ai-review-loop/scripts/query.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .agents/skills/pr-ai-review-loop/scripts/wait.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | …s/skills/pr-ai-review-loop/scripts/test_pass_marker.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | server/routers/providers.py | 81 | # Pydantic 模型 | COMMENT |
| LOW | server/routers/custom_providers.py | 61 | # 写入路径上的 endpoint 字段统一走运行时校验,键集合自动跟随 ENDPOINT_REGISTRY; | COMMENT |
| LOW | server/routers/custom_providers.py | 321 | family: str | COMMENT |
| LOW | server/agent_runtime/service.py | 361 | elif await self._new_session_matches_project(mapped_session_id, project_name): | COMMENT |
| LOW | server/agent_runtime/session_manager.py | 581 | self.sessions: dict[str, ManagedSession] = {} | COMMENT |
| LOW | server/agent_runtime/agent_access_policy.py | 81 | # 加载),也是「仓库内参考资料放行」的围栏基准。 | COMMENT |
| LOW | server/agent_runtime/agent_access_policy.py | 101 | # python skills 入口前缀。约定形态 ``python .claude/skills/<skill>/scripts/ | COMMENT |
| LOW | server/services/admission/cost_estimation.py | 321 | COMMENT | |
| LOW | .github/workflows/market-publish-index.yml | 1 | # 市场源索引发布(可复用工作流)。 | COMMENT |
| LOW | .github/workflows/market-validate.yml | 1 | # 市场源校验(可复用工作流)。 | COMMENT |
| LOW | lib/infra/path_safety.py | 61 | """ | COMMENT |
| LOW | lib/config/registry.py | 41 | media_type: str | COMMENT |
| LOW | lib/config/registry.py | 81 | models: dict[str, ModelInfo] = field(default_factory=dict) | COMMENT |
| LOW | lib/backends/backend_assembly/specs.py | 261 | # 文本 backend 注册在独立的 lib.backends.text_backends.registry(非 media registry),构造形态与媒体有别: | COMMENT |
| LOW | lib/backends/backend_assembly/specs.py | 381 | registry_backend=_TEXT_OPENAI_COMPAT_REGISTRY_BACKEND, | COMMENT |
| LOW | lib/backends/video_backends/kling.py | 221 | model=model or DEFAULT_MODEL, | COMMENT |
| 12 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/types/grid.ts | 17 | frame_type: "first" | "transition" | "placeholder"; | CODE |
| LOW⚡ | …tend/src/components/shared/ModelConfigSection.test.tsx | 1426 | expect(picker).toHaveAttribute("placeholder", "workflow 原生(480p)"); | CODE |
| LOW⚡ | …tend/src/components/shared/ModelConfigSection.test.tsx | 1436 | expect(picker).toHaveAttribute("placeholder", "尺寸由 workflow 决定"); | CODE |
| LOW⚡ | …tend/src/components/shared/ModelConfigSection.test.tsx | 1444 | expect(picker).toHaveAttribute("placeholder", "workflow 原生(720p)"); | CODE |
| LOW | …d/src/components/canvas/episodes/EpisodesView.test.tsx | 308 | expect(within(dialog).getByLabelText("标题")).toHaveAttribute("placeholder", "第 2 集"); | CODE |
| LOW | …rc/components/canvas/episode-page/EpisodeHead.test.tsx | 67 | expect(screen.getByRole("textbox", { name: "编辑分集标题" })).toHaveAttribute("placeholder", "第 2 集"); | CODE |
| LOW | …src/components/canvas/timeline/EndFramePicker.test.tsx | 53 | frame_type: "placeholder", | CODE |
| LOW | …nts/pages/settings/CustomProviderForm.comfyui.test.tsx | 411 | expect(durations).toHaveAttribute("placeholder", "此 workflow 时长固定"); | CODE |
| LOW | …nts/pages/settings/CustomProviderForm.comfyui.test.tsx | 437 | expect(durations).toHaveAttribute("placeholder", "此 workflow 未提供帧率,时长固定"); | CODE |
| LOW | …nts/pages/settings/CustomProviderForm.comfyui.test.tsx | 464 | expect(durations).toHaveAttribute("placeholder", "此 workflow 换算不出整秒时长"); | CODE |
| LOW | …nts/pages/settings/CustomProviderForm.comfyui.test.tsx | 494 | expect(picker).toHaveAttribute("placeholder", "workflow 原生(480p)"); | CODE |
| LOW | …nts/pages/settings/CustomProviderForm.comfyui.test.tsx | 511 | expect(picker).toHaveAttribute("placeholder", "尺寸由 workflow 决定"); | CODE |
| LOW⚡ | …nts/pages/settings/CustomProviderForm.comfyui.test.tsx | 526 | expect(picker).toHaveAttribute("placeholder", "workflow 原生(720p)"); | CODE |
| LOW⚡ | …nts/pages/settings/CustomProviderForm.comfyui.test.tsx | 531 | expect(screen.getByLabelText("视频并发")).toHaveAttribute("placeholder", "默认"); | CODE |
| LOW⚡ | …nts/pages/settings/CustomProviderForm.comfyui.test.tsx | 535 | expect(screen.getByLabelText("视频并发")).toHaveAttribute("placeholder", "默认 1"); | CODE |
| LOW | tests/unit/lib/backends/image_backends/test_gemini.py | 48 | api_key="fake-key", | CODE |
| LOW⚡ | tests/unit/lib/backends/image_backends/test_gemini.py | 101 | backend_type="aistudio", api_key="fake-key", rate_limiter=fake_rate_limiter, image_model=model | CODE |
| LOW | tests/unit/lib/script/grid/test_grid_layout.py | 248 | assert [c.frame_type for c in chain[5:]] == ["placeholder"] * 4 | CODE |
| LOW⚡ | server/routers/providers.py | 67 | "base_url": {"label": "Base URL", "type": "url", "placeholder": "Default"}, | CODE |
| LOW⚡ | server/routers/providers.py | 68 | "wan3_base_url": {"label": "Wan 3.0 Base URL", "type": "url", "placeholder": "Default"}, | CODE |
| LOW | server/routers/providers.py | 341 | if "placeholder" in meta: | CODE |
| LOW | server/routers/providers.py | 342 | field["placeholder"] = meta["placeholder"] | CODE |
| LOW | server/services/grid/grid_split.py | 171 | if frame.frame_type == "placeholder": | CODE |
| LOW | scripts/probe_smoke.py | 63 | api_key="sk-ant-fake-key-for-smoke-test-not-real", | CODE |
| LOW | lib/script/grid/models.py | 38 | frame_type: Literal["first", "transition", "placeholder"] | CODE |
| LOW | lib/script/grid/models.py | 72 | - Remaining cells: frame_type="placeholder" | STRING |
| LOW | lib/script/grid/models.py | 109 | frame_type="placeholder", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …_profile/.claude/agents/split-reference-video-units.md | 60 | ### Step 0: 查视频模型能力与用户偏好 | COMMENT |
| LOW | …untime_profile/.claude/agents/create-episode-script.md | 27 | ### Step 1: 确认前置条件 | COMMENT |
| LOW | …untime_profile/.claude/agents/create-episode-script.md | 40 | ### Step 2: 调用工具生成 JSON 剧本 | COMMENT |
| LOW | …untime_profile/.claude/agents/create-episode-script.md | 52 | ### Step 3: 验证生成结果 | COMMENT |
| LOW | …untime_profile/.claude/agents/create-episode-script.md | 62 | ### Step 4: 返回摘要 | COMMENT |
| LOW⚡ | agent_runtime_profile/.claude/agents/generate-assets.md | 20 | ### Step 1: 读取项目状态 | COMMENT |
| LOW⚡ | agent_runtime_profile/.claude/agents/generate-assets.md | 26 | ### Step 2: 执行任务命令 | COMMENT |
| LOW⚡ | agent_runtime_profile/.claude/agents/generate-assets.md | 34 | ### Step 3: 验证结果 | COMMENT |
| LOW⚡ | agent_runtime_profile/.claude/agents/generate-assets.md | 38 | ### Step 4: 返回结构化状态 | COMMENT |
| LOW | …ime_profile/.claude/agents/split-narration-segments.md | 49 | ### Step 0: 查视频模型能力与用户偏好 | COMMENT |
| LOW | …ntime_profile/.claude/agents/normalize-drama-script.md | 51 | ### Step 0: 查视频模型能力与用户偏好 | COMMENT |
| LOW⚡ | lib/db/repositories/task_repo.py | 1040 | # Step 1: collect task_ids to requeue | COMMENT |
| LOW⚡ | lib/db/repositories/task_repo.py | 1048 | # Step 2: batch UPDATE — single round-trip for all tasks | COMMENT |
| LOW | lib/db/repositories/task_repo.py | 1063 | # Step 3: reload updated tasks in one SELECT IN | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …nit/server/routers/test_discover_anthropic_fallback.py | 53 | # Create an active credential first | COMMENT |
| MEDIUM | …ts/unit/server/agent_runtime/test_assistant_service.py | 109 | # Create an in-memory async store and seed data | COMMENT |
| MEDIUM | …ts/unit/server/agent_runtime/test_assistant_service.py | 695 | # Create a fallback skill for metadata parsing test | COMMENT |
| MEDIUM | …/server/agent_runtime/test_assistant_service_skills.py | 22 | # Create a dev-only skill in .claude/skills/ (should NOT appear) | COMMENT |
| MEDIUM | tests/unit/lib/artifacts/test_grid_executor.py | 241 | # Create a fake 400x400 grid image (2x2, each cell 200x200) | COMMENT |
| MEDIUM⚡ | tests/unit/lib/backends/image_backends/test_gemini.py | 149 | # Create a small test image | COMMENT |
| MEDIUM | scripts/migrate_sqlite_to_orm.py | 33 | # Create a minimal lib package stub so sub-imports resolve correctly | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | website/docs/dev/architecture.md | 110 | ### 5.1 编排 Skill {#orchestration-skills} | COMMENT |
| MEDIUM | …saurus-plugin-content-docs/current/dev/architecture.md | 108 | ### 5.1 Orchestration Skill {#orchestration-skills} | COMMENT |
| MEDIUM | …s/skills/pr-ai-review-loop/scripts/classify_commits.sh | 2 | # classify_commits.sh — emit metadata for each PR commit so the orchestrating agent can judge "nit-only vs feature". | COMMENT |
| MEDIUM | …s/skills/pr-ai-review-loop/scripts/classify_commits.sh | 36 | # Output is raw metadata (file count, line stats, message text); the orchestrating agent makes the final call — | COMMENT |
| MEDIUM | server/auth.py | 468 | # Type aliases for FastAPI dependency injection | COMMENT |
| MEDIUM | lib/script/script_models.py | 24 | # Structured Outputs 下不太会产出额外字段,产出即 hallucination,拒比静默丢更安全。 | COMMENT |
| MEDIUM | lib/script/script_models.py | 468 | # 与「未知字段(typo / hallucination)一律拒」并存——前者是已知 deprecated, | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/fakes.py | 615 | CODE | |
| LOW | tests/unit/lib/billing/test_usage_summary.py | 28 | CODE | |
| LOW | …/integration/server/routers/projects_router_support.py | 163 | CODE | |
| LOW | …ntegration/server/routers/test_usage_router_summary.py | 21 | CODE | |
| LOW | …er/services/tasks/test_execute_reference_video_task.py | 42 | CODE | |
| LOW | …tion/server/services/tasks/generation_tasks_support.py | 35 | CODE | |
| LOW | server/routers/usage.py | 121 | CODE | |
| LOW | lib/backends/image_backends/kling.py | 69 | CODE | |
| LOW | lib/script/script_generator.py | 410 | CODE | |
| LOW | lib/script/draft_violation.py | 44 | CODE | |
| LOW | lib/project/project_manager.py | 2411 | CODE | |
| LOW | lib/prompts/prompt_builders_script.py | 288 | CODE | |
| LOW | lib/prompts/prompt_builders_reference.py | 34 | CODE | |
| LOW | lib/db/repositories/usage_repo.py | 167 | CODE | |
| LOW | lib/db/repositories/task_repo.py | 194 | CODE | |
| LOW | lib/billing/ledger.py | 146 | CODE | |
| LOW | lib/billing/ledger.py | 260 | CODE | |
| LOW | lib/generation/generation_queue.py | 386 | CODE | |
| LOW | lib/generation/media_generator.py | 219 | CODE | |
| LOW | lib/generation/media_generator.py | 786 | CODE | |
| LOW | lib/generation/media_generator.py | 1077 | CODE | |
| LOW | lib/generation/generation_queue_client.py | 139 | CODE | |
| LOW | lib/generation/generation_queue_client.py | 194 | CODE | |
| LOW | lib/generation/generation_queue_client.py | 446 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …ect/project_migrations/test_project_migration_v2_v3.py | 0 | 历史 project.json 可能存字符串版本号,守卫做 int 归一化而非抛 typeerror。 | STRING |
| HIGH | …ect/project_migrations/test_project_migration_v3_v4.py | 0 | 历史 project.json 可能存字符串版本号,守卫做 int 归一化而非抛 typeerror。 | STRING |
| HIGH | …ect/project_migrations/test_project_migration_v4_v5.py | 0 | 历史 project.json 可能存字符串版本号,守卫做 int 归一化而非抛 typeerror。 | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …saurus-plugin-content-docs/current/dev/contributing.md | 84 | The only published location for user documentation is [docs.arc-reel.com](https://docs.arc-reel.com/en/); source files l | CODE |
| HIGH | .agents/skills/triage/SKILL.md | 16 | > *This was generated by AI during triage.* | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | lib/script/source_loader/loader.py | 100 | 规范化上传文件为 UTF-8 .txt,并在转换非字节等价时备份原始内容。 Args: src: 临时文件路径(上传层已落盘)。 dst_dir: 目标项目的 source/ | STRING |
| HIGH | lib/project/project_manager.py | 1259 | 从剧本文件同步集数信息到 project.json Agent 写入剧本后必须调用此方法以确保 WebUI 能正确显示剧集列表。 Args: project_na | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | lib/db/repositories/task_repo.py | 1040 | # Step 1: collect task_ids to requeue | COMMENT |
| LOW⚡ | lib/db/repositories/task_repo.py | 1048 | # Step 2: batch UPDATE — single round-trip for all tasks | COMMENT |
| LOW | lib/db/repositories/task_repo.py | 1063 | # Step 3: reload updated tasks in one SELECT IN | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/server/agent_runtime/test_session_manager.py | 847 | # Write file without extension (e.g. Makefile) — allowed (not in code blacklist) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …s/skills/diagnosing-bugs/scripts/hitl-loop.template.sh | 6 | # Usage: | COMMENT |