diff --git a/.fusion/config.json b/.fusion/config.json deleted file mode 100644 index bc1393a..0000000 --- a/.fusion/config.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "settings": { - "globalPause": false, - "enginePaused": false, - "maxConcurrent": 2, - "maxTriageConcurrent": 2, - "globalMaxConcurrent": 4, - "maxWorktrees": 4, - "pollIntervalMs": 15000, - "heartbeatMultiplier": 1, - "groupOverlappingFiles": true, - "overlapIgnorePaths": [], - "autoMerge": true, - "mergeStrategy": "direct", - "directMergeCommitStrategy": "auto", - "requirePrApproval": false, - "pushAfterMerge": false, - "pushRemote": "origin", - "unavailableNodePolicy": "block", - "recycleWorktrees": false, - "executorAllowSiblingBranchRename": false, - "worktreeNaming": "random", - "taskPrefix": "FN", - "includeTaskIdInCommit": true, - "commitAuthorEnabled": true, - "commitAuthorName": "Fusion", - "commitAuthorEmail": "noreply@runfusion.ai", - "modelPresets": [], - "autoSelectModelPreset": false, - "completionDocumentationMode": "off", - "defaultPresetBySize": {}, - "autoResolveConflicts": true, - "smartConflictResolution": true, - "mergerAutostashMaxAgeHours": 24, - "worktreeRebaseBeforeMerge": true, - "worktreeRebaseRemote": "", - "worktreeRebaseLocalBase": true, - "mergeConflictStrategy": "smart-prefer-main", - "mergeStrategyOverlapBehavior": "flip-to-prefer-branch", - "workflowStepTimeoutMs": 360000, - "workflowRevisionForkOnScopeMismatch": true, - "strictScopeEnforcement": false, - "buildRetryCount": 0, - "verificationFixRetries": 3, - "buildTimeoutMs": 300000, - "requirePlanApproval": false, - "agentProvisioning": {}, - "specStalenessEnabled": false, - "specStalenessMaxAgeMs": 21600000, - "taskStuckTimeoutMs": 600000, - "staleHighFanoutBlockerAgeThresholdMs": 7200000, - "aiSessionTtlMs": 604800000, - "aiSessionCleanupIntervalMs": 3600000, - "autoUnpauseEnabled": true, - "autoUnpauseBaseDelayMs": 300000, - "autoUnpauseMaxDelayMs": 3600000, - "maxStuckKills": 6, - "preserveProgressOnStuckRequeue": true, - "maxPostReviewFixes": 1, - "maxSpawnedAgentsPerParent": 5, - "maxSpawnedAgentsGlobal": 20, - "maintenanceIntervalMs": 300000, - "autoArchiveDoneTasksEnabled": true, - "autoArchiveDoneAfterMs": 172800000, - "archiveAgentLogMode": "compact", - "autoUpdatePrStatus": false, - "githubCommentOnDone": false, - "githubTrackingEnabledByDefault": false, - "githubAuthMode": "gh-cli", - "autoBackupEnabled": false, - "autoBackupSchedule": "0 2 * * *", - "autoBackupRetention": 7, - "autoBackupDir": ".fusion/backups", - "memoryBackupEnabled": false, - "memoryBackupSchedule": "0 3 * * *", - "memoryBackupRetention": 14, - "memoryBackupDir": ".fusion/backups/memory", - "memoryBackupScope": "all", - "autoSummarizeTitles": false, - "useAiMergeCommitSummary": true, - "insightExtractionEnabled": false, - "insightExtractionSchedule": "0 2 * * *", - "insightExtractionMinIntervalMs": 86400000, - "taskEvaluationEnabled": false, - "taskEvaluationSchedule": "0 5 * * *", - "taskEvaluationFollowUpPolicy": "off", - "memoryEnabled": true, - "memoryBackendType": "qmd", - "memoryAutoSummarizeEnabled": false, - "memoryAutoSummarizeThresholdChars": 50000, - "memoryAutoSummarizeSchedule": "0 3 * * *", - "memoryDreamsEnabled": false, - "memoryDreamsSchedule": "0 4 * * *", - "runStepsInNewSessions": false, - "maxParallelSteps": 2, - "missionStaleThresholdMs": 600000, - "missionMaxTaskRetries": 3, - "missionHealthCheckIntervalMs": 300000, - "reflectionEnabled": false, - "reflectionIntervalMs": 3600000, - "reflectionAfterTask": true, - "reviewHandoffPolicy": "disabled", - "showQuickChatFAB": false, - "researchSettings": { - "enabled": true, - "enabledSources": { - "webSearch": true, - "pageFetch": true, - "github": false, - "localDocs": true, - "llmSynthesis": true - }, - "limits": { - "maxConcurrentRuns": 3, - "maxSourcesPerRun": 20, - "maxDurationMs": 300000, - "requestTimeoutMs": 30000 - } - }, - "evalSettings": { - "enabled": false, - "intervalMs": 86400000, - "followUpPolicy": "suggest-only", - "retentionDays": 30 - }, - "researchEnabled": true, - "researchMaxConcurrentRuns": 3, - "researchDefaultTimeout": 300000, - "researchMaxSourcesPerRun": 20, - "researchMaxSynthesisRounds": 2 - } -} \ No newline at end of file diff --git a/.fusion/fusion.db b/.fusion/fusion.db deleted file mode 100644 index 4918362..0000000 Binary files a/.fusion/fusion.db and /dev/null differ diff --git a/.fusion/memory/2026-05-13.md b/.fusion/memory/2026-05-13.md deleted file mode 100644 index d722dc0..0000000 --- a/.fusion/memory/2026-05-13.md +++ /dev/null @@ -1,3 +0,0 @@ -# Daily Memory 2026-05-13 - - diff --git a/.fusion/memory/2026-05-14.md b/.fusion/memory/2026-05-14.md deleted file mode 100644 index 5114766..0000000 --- a/.fusion/memory/2026-05-14.md +++ /dev/null @@ -1,3 +0,0 @@ -# Daily Memory 2026-05-14 - - diff --git a/.fusion/memory/DREAMS.md b/.fusion/memory/DREAMS.md deleted file mode 100644 index 1e1f4f5..0000000 --- a/.fusion/memory/DREAMS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Memory Dreams - - diff --git a/.fusion/memory/MEMORY.md b/.fusion/memory/MEMORY.md deleted file mode 100644 index 3f22275..0000000 --- a/.fusion/memory/MEMORY.md +++ /dev/null @@ -1,29 +0,0 @@ -# Project Memory - - - -## Architecture - - - -## Conventions - - - -## Pitfalls - - - -## Context - - - -**Headquarter Backend Patterns (FN-004)** - -- Use SQLAlchemy 2.0 async style with `mapped_column` + `Mapped[]` syntax -- For Alembic + asyncpg: rewrite `postgresql://` to `postgresql+asyncpg://` in both `app/db.py` and `alembic/env.py` -- For pytest + async SQLAlchemy testing: use `pytest-asyncio==0.21.2` (not 1.3.0) with `asyncio_mode = "auto"`, `NullPool`, and a session-scoped `event_loop` fixture to avoid event loop mismatches with asyncpg -- Test DB isolation: `begin_nested()` on a connection + `async_sessionmaker` bound to that connection; override `get_db_session` dependency -- Secret encryption: derive Fernet key from settings string via `SHA-256 + base64.urlsafe_b64encode` -- Auth dev bypass: only active when `settings.debug and settings.auth_dev_bypass`; creates/returns a fixed `authentik_sub="dev-user"` -- JWT production path: fetch OIDC discovery → get `jwks_uri` → fetch JWKS → match by `kid` → decode with `jwt.decode(..., algorithms=["RS256"])`