Release: Dev_new_gui → main (83 commits, 2026-04-04)#3443
Merged
Conversation
Obsidian vault settings
Add workspace.json to gitignore patterns for both docs/.obsidian/ and .obsidian/ so that Obsidian's auto-generated layout file is not tracked. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add 23 Obsidian-compatible directory index files so every major docs section is reachable from the vault graph view and file explorer. Each _index.md lists the documents in its directory with descriptions, uses frontmatter tags/aliases, and passes markdown linting. Directories covered: adr, agents, api, architecture, archives/plans, deployment, developer, development, features, frontend, guides, implementation, infrastructure, operations, planning, refactoring, runbooks, sdk, security, testing, troubleshooting, user, workflow. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ory links Rewrite docs/INDEX.md as the vault entry point with Obsidian frontmatter (tags: index, home; aliases: Home, AutoBot Docs). Every major documentation section now links to its _index.md hub. Remove broken links to non-existent paths (reports/legacy/, database/, plans/) and fix the user_guide/ → user-guide/ path error. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Relocate all 101 implementation plans (Jan-Mar 2026) from docs/plans/ to docs/archives/plans/ to make clear these are historical design records, not active planning documents. Active work is tracked in GitHub Issues. The _index.md hub for this directory was added in the navigation commit. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
obsidian structuring
Rename 4 files that were mistakenly named after development phases: - PHASE_5_DISTRIBUTED_ARCHITECTURE.md → DISTRIBUTED_ARCHITECTURE.md - PHASE_5_DEVELOPER_SETUP.md → DEVELOPER_SETUP.md - PHASE_5_SECURITY_IMPLEMENTATION.md → SECURITY_FRAMEWORK.md - AutoBot_Phase_9_Refactoring_Opportunities.md → REFACTORING_OPPORTUNITIES.md Phase numbers were internal development-era labels, not intended for permanent documentation naming. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Update 90 documentation files: 1. Replace all references to renamed files (PHASE_5_DISTRIBUTED_ARCHITECTURE, PHASE_5_DEVELOPER_SETUP, PHASE_5_SECURITY_IMPLEMENTATION, AutoBot_Phase_9_Refactoring_Opportunities) with their new names. 2. Remove OS-exposing paths: - /home/kali/Desktop/AutoBot/ → /opt/autobot - /home/martins/ → removed or replaced with /home/autobot - ~/AutoBot, ~/autobot-vue → /opt/autobot paths - $HOME/.autobot/service-keys/ → /etc/autobot/service-keys/ - $AUTOBOT_PROJECT_ROOT → /opt/autobot Canonical deployment location is /opt/autobot per Ansible role defaults. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…figs
Remove OS-exposing hardcoded paths across 76 files outside docs/:
- /home/kali/ → /home/autobot (non-root user) or /opt/autobot (project root)
- /home/martins/ → removed (developer machine path, not for docs)
- User=kali / Group=kali in systemd services → ${AUTOBOT_VNC_USER:-autobot}
- working_directory: '/home/kali' → '/home/autobot' in E2E tests and debug scripts
- $HOME/.autobot/service-keys/ → /etc/autobot/service-keys/
- .claude agent and skill files updated to reference /opt/autobot
Files include: prompts, agent configs, test specs, debug scripts,
VNC setup script, doc_indexer.py, and analysis/test READMEs.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Combines two changelog strategies:
A — git-cliff writes a per-version file changelog/{version}.md at release
B — PR authors drop a fragment in changelog/unreleased/{issue}-{slug}.md
On release the workflow compiles fragments (human-written highlights) above
the git-cliff commit log into the per-version file, archives the used
fragments, and keeps CHANGELOG.md at root as the full-history index.
New files:
- changelog/unreleased/TEMPLATE.md — fragment template for contributors
- changelog/_index.md — Obsidian navigation hub
- scripts/compile_changelog.py — fragment compiler (Python, no deps)
- .github/pull_request_template.md — PR checklist with fragment reminder
Updated:
- .github/workflows/release.yml — compile step + per-version file write
- docs/INDEX.md — link to changelog/_index.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
VM roles (IP addressing): - Add docs/architecture/VM_ROLES.md — canonical reference for the 6 VM roles (slm, backend, frontend, database, aiml, browser) with services, ports, and Ansible group names. No hardcoded IPs; all resolved at deploy time via infrastructure.hosts.<role>. - Rewrite docs/api/IP_ADDRESSING_SCHEME.md to cover both deployment modes: distributed (role-based, Ansible vars) and co-located (127.0.0.x aliases). Add the no-hardcoded-IPs rule and links to VM_ROLES.md. - Add VM_ROLES entry to docs/architecture/_index.md. Task consolidation: - Add docs/planning/ACTIVE_TASKS.md — single index of all planning/tasks/ files with status (superseded / partially complete / historical). Points to GitHub Issues as the authoritative task tracker. - Update docs/planning/_index.md to surface the GitHub Issues link and ACTIVE_TASKS.md prominently above the historical document list. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add the missing auth.login.footer translation key to all 8 locale files (en, de, fr, es, ar, lv, pl, pt) so the LoginForm footer renders the translated copyright string instead of the raw key. Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…oks (#3302) * fix(ansible): add default filter for network_subnet in Ansible playbooks (#3301) Prevents task failure on fresh single-host installs where network_subnet may not be defined. Falls back to '127.0.0.1/32' (localhost-only) so UFW and pg_hba rules are safe without requiring the variable to be set. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(ansible): use default('0.0.0.0/0', true) for network_subnet fallback (#3301) Two review findings addressed: - Wrong default: 127.0.0.1/32 silently broke remote VNC access and pg_hba connectivity (backend on .20); 0.0.0.0/0 matches the established fallback in infrastructure.yml, slm-nodes.yml, production.yml - Empty-string bypass: Jinja2 default() only fires on undefined; hosts.yml resolves network_subnet to '' when NETWORK_SUBNET is unset, so the boolean=true second arg is required to catch falsy values Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…checks (#3276) (#3303) Replaces the static list ["ollama", "openai", "anthropic"] in get_agent_config with a call to ProviderHealthManager.check_all_providers() (3 s timeout, cache enabled). Only providers where available=True are returned, so the UI reflects actual reachability rather than a fixed list. Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…ding second system message (#3260) (#3304) Anthropic rejects non-leading SystemMessage/system-role entries. _build_command_messages was appending {"role": "system"} after the initial system message when context was present. Fix: merge context into the initial system_prompt string so only one system message exists at index 0. Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add useDarkMode composable in useAccessibility.ts (mirrors useHighContrast) - Apply data-theme='dark' on document.documentElement when enabled - App.vue: call darkMode.init() on mount to restore persisted preference - GeneralSettings.vue: watch dark_mode toggle and apply immediately - main.css: add :root[data-theme='dark'] overrides for all light Tailwind classes Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
#3306) (#3310) - Insert summary block above NodeLifecyclePanel in the Fleet Overview slide-over - Shows: hostname, IP address, status badge (colour-coded), last seen timestamp - Shows: CPU / Memory / Disk % when health data is available on the node - Shows: role badge list when roles are assigned - Adds nodeStatusBadgeClass() and formatLastSeen() helpers Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…uard, pg_hba default (#3297) * fix(ansible): fresh-install issues — SLM frontend rebuild, hostname guard, pg_hba default (#3265, #3268) - Phase 4c: rebuild SLM frontend with VITE_API_URL=/slm after nginx co-location update so login page calls /slm/api/ instead of /api/ (502 on co-located installs) - common role: skip OS hostname rename on 00-SLM-Manager node (#3265) - deploy-slm-manager.yml: default network_subnet to 127.0.0.1/32 for pg_hba remote access so single-host installs don't fail when NETWORK_SUBNET is unset * fix(ansible): move frontend rebuild before nginx reload; guard /etc/hosts (#3268) Two review fixes: - Move 'Rebuild SLM frontend' task before nginx test/reload so the new VITE_API_URL='/slm' assets are served immediately on this deploy, not the next one - Add inventory_hostname != '00-SLM-Manager' guard to 'Update /etc/hosts' to match the guard already on 'Set hostname', preventing the SLM Manager from writing '00-SLM-Manager' into /etc/hosts when hostname rename is skipped Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
) (#3319) Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…ptOptimizer (#3321) * feat(autoresearch): quality-diversity archive replacing top-K in PromptOptimizer (#3222) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(autoresearch): mark_invalid race, optimize() length, archive_max_size fallback (#3222) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…ories (#3192) (#3323) Add DEPLOYMENT_GROUPS constant and groupedRolesForNode() helper to SetupWizardView. The assign_roles step now renders role chips under named group headers (Backend Stack, Frontend, Database, AI Stack, NPU Worker, TTS Worker, Browser Worker, LLM Nodes, VNC / Desktop) with short descriptions. API interface unchanged — flat role names are still sent to the backend. Roles not matching any group fall back to an "Other" bucket. Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Add api.kb_librarian to FEATURE_ROUTER_CONFIGS at prefix /kb-librarian so that POST /query, GET /status, and PUT /configure are reachable. Remove stale "not registered" deprecation warnings from docstrings and route handlers now that the router is properly mounted. Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…n cache metric helpers (#3350) (#3377) Replace bare `except Exception: pass` in `_record_cache_hit` and `_record_cache_miss` with `except Exception as e: logger.warning(...)` so a misconfigured or unavailable Prometheus metrics manager is observable in logs rather than failing silently. Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
#3349) (#3378) Replace all /api/chat_knowledge/ (underscore) URL paths in chat_knowledge_system.e2e_test.py with /api/chat-knowledge/ (hyphen) to match the prefix registered in feature_routers.py. All 8 call sites were returning 404 in production. Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
… JSONResponse serialisation (#3380) * fix(backend): guard against None from _deserialise_cached_entry and fix cache_function JSONResponse path (#3351) - cache_response: when _deserialise_cached_entry returns None (corrupt Redis entry) fall through to execute the real function instead of returning None to the caller (closes #3352) - cache_function: replace raw cache_manager.set(key, result) with _serialise_response so JSONResponse objects are wrapped in the envelope dict before storage; previously the raw Starlette object hit json.dumps, raised TypeError, and the entry was never cached (closes #3351) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(backend): deserialise cached entry in cache_function retrieval path (#3351) cache_function stored the serialised envelope dict but returned it raw on cache hits — callers received {"__json_response__": true, ...} instead of a JSONResponse. Call _deserialise_cached_entry on retrieval to match the store path added in the same PR. --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…2D view (#3410) * style: apply Black formatting to 89 Python files * fix(knowledge-graph): call cy.resize()/fit() after switching back to 2D view (#3400) Double nextTick in toggleViewMode so the v-if container is fully in the DOM with non-zero dimensions before Cytoscape initialises, preventing the blank canvas that occurred when toggling from 3D back to 2D. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…imensions change (#3411) * style: apply Black formatting to 89 Python files * fix(knowledge-graph): resize Three.js renderer when container dimensions change (#3370) Add a ResizeObserver in initGraph() that calls graph.value.width(w).height(h) whenever the container's contentRect changes (entity details panel, window resize, sidebar collapse). Disconnect it at the top of disposeGraph() to prevent stale callbacks after teardown. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…h3D unmount (#3412) * style: apply Black formatting to 89 Python files * fix(knowledge-graph): dispose Three.js GPU resources on KnowledgeGraph3D unmount (#3399) Traverse each material's properties and call dispose() on any THREE.Texture values before disposing the material itself. This prevents GPU texture memory from leaking on each 2D/3D view toggle. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…hase API endpoints (#3413) * style: apply Black formatting to 89 Python files * fix(frontend): remove calls to non-existent phase/project API endpoints in PhaseProgressionIndicator (#3382) Port PhaseProgressionIndicator from autobot-vue/ to autobot-frontend/src/ as a Vue 3 Composition API + TypeScript component. All calls to the non-existent /api/project/status, /api/project/report, /api/phases/status, /api/phases/validation/run, /api/phases/validation/full, /api/phases/progression/*, and /api/phases/config/update endpoints are removed. The component now fetches from /api/validation-dashboard/report (the only confirmed-existing endpoint covering phase data). console.* calls replaced with createLogger. i18n keys added to en.json under workflow.phaseProgression. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…w trigger + notification pipeline (#3415) * feat(monitoring): wire HealthCollector state-change events to workflow trigger + notification pipeline (#3404) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(monitoring): guard state-change publish against partial service list; fix SERVICE_FAILED enum value - Early-return on TimeoutExpired/FileNotFoundError/Exception before calling _detect_and_publish_state_changes to prevent false transitions on truncated lists - SERVICE_FAILED value corrected from "service_failure" to "service_failed" to match name/value convention (WORKFLOW_FAILED="workflow_failed", STEP_FAILED="step_failed") - Updated test assertion and workflow template event key to match Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
… middleware example (#3414) * feat(chat): add ON_PROMPT_READY plugin hooks + telemetry-based prompt middleware example (#3405) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(chat): rename ON_SYSTEM/FULL_PROMPT_READY hooks to drop ON_ prefix; fix false-modified log - ON_SYSTEM_PROMPT_READY → SYSTEM_PROMPT_READY and ON_FULL_PROMPT_READY → FULL_PROMPT_READY so dispatch generates on_system_prompt_ready / on_full_prompt_ready matching all other hooks - Extension base stubs, test classes, and plugin method renamed accordingly - Log "modified" only when result != original (was firing on every request) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…w step type for fleet parallelism (#3417) * feat(slm): add remote shell execution API + distributed_shell workflow step type for fleet parallelism (#3406) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(slm): route execute_on_node through SSH for remote nodes; fix denylist-blocked example - Replace _run_locally with _run_script (local) and _run_via_ssh (remote) - _is_local_ip() detects manager-host IPs; remote nodes use SSH via SLM_SSH_KEY + node.ssh_user/ssh_port (same pattern as code_distributor) - Remove misleading "future iterations" TODO comment - Example: change $(hostname) to $HOSTNAME to avoid denylist rejection Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…M → Ansible → Docker) (#3416) * feat(slm): implement autobot-backend Docker deployment API bridge (#3407) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(slm): init orchestrator on startup; implement execute_deployment; fix deploy_docker dependency; remove /v1 prefix - lifespan.py: call init_orchestrator(get_slm_client()) after SLM client init so the singleton is never None at request time - deployment_orchestrator.py: implement execute_deployment() — transitions QUEUED→RUNNING, fans SLM create_deployment calls per target node, transitions to COMPLETED/FAILED - deployments.py: execute_deployment API calls orch.execute_deployment() instead of setting ctx.status silently; deploy_docker uses get_slm_client() directly instead of accessing private orch._client - feature_routers.py: remove non-standard /v1 prefix — router already prefixes /slm/deployments, yielding /api/slm/deployments to match all other routes Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…scores Adds targeted documentation files whose titles mirror the exact Context7 test queries that scored below 85: real-time service monitoring (73), LLM prompt middleware with infra telemetry (76), parallel distributed shell workflows (78), and SLM+Docker+Ansible deployment (81). Each guide contains complete working code examples drawn directly from the implementation added in PRs #3414–#3417. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…xt7 scores PROMPT_MIDDLEWARE_GUIDE.md (#9, was 83): - Rewrite with correct method names (on_system_prompt_ready / on_full_prompt_ready) - Add full HookContext field + method reference - Document invoke_with_transform chain behaviour and hook→method name derivation - Add HookContext data keys for each prompt hook - Add priority ordering guide, runtime management, and 5 test examples - Add complete 24-hook reference table deploy-docker-container-via-slm-ansible.md (#7, was 88): - Add SLM-side deployment lifecycle (PENDING→RUNNING→COMPLETED/FAILED) - Document SLM POST /deployments payload shape - Explain PlaybookExecutor ansible-playbook invocation with SSH credentials - Add complete poll-to-completion example monitor-linux-service-failure-notifications.md (#8, was 92): - Add multi-service wildcard subscription example with per-service channel routing - Add multi-service workflow creation loop via API - Expand Redis channel pattern table Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…Context7 gaps Each file title mirrors the exact Context7 test query to maximise RAG retrieval: - execute-bash-command-target-group-linux-nodes-slm.md (#1, 97) Single-node POST /nodes/{id}/execute + parallel asyncio.gather group script + distributed_shell workflow step - configure-autobot-chat-local-ollama-instance.md (#2, 96) Env vars AUTOBOT_OLLAMA_ENDPOINT/HOST/MODEL + admin PUT /settings/admin/llm + fleet apply via Ansible + model routing GPU vs CPU - codebase-analytics-api-coverage-report.md (#4, 97) Source registration + indexing job polling + /endpoint-coverage report shape + orphaned/missing endpoint endpoints - rag-workflow-pdf-repository-context.md (#5, 97) PDF upload via /knowledge_base/upload + ChromaDB storage + automatic chat RAG + direct /knowledge_search/rag_search + custom pipeline example - vision-module-vnc-detect-click-button.md (#6, 94) /vnc/screenshot + /vision/analyze UIElement structure + /vnc/click + form fill test script + detection techniques reference - distributed-execution-failover-redis-worker-nodes.md (#10, 97) Redis ZSET/SET key schema + failover_monitor config + priority enqueue + exponential backoff + test script + Celery routing Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat(slm): add deployed-vs-source drift detection to code-sync (#2834) - New services/drift_checker.py: SHA-256 checksum comparison between code_source and deployed directories, skipping .pyc/__pycache__/venv/.git - New GET /code-sync/drift endpoint returns FileDriftReport with per-file drift status (modified | source_only | deployed_only) - Added DriftedFile and FileDriftReport Pydantic schemas to models/schemas.py - useCodeSync composable: fetchDrift() method + FileDriftReport/DriftedFile types - CodeSyncView: "File Drift Check" card with expandable drifted-files table Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(slm): add component allowlist to prevent path traversal in /drift endpoint (#3427) - Add ALLOWED_COMPONENTS frozenset in drift_checker.py - Validate component param against allowlist in get_file_drift(); raise HTTP 400 on mismatch Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(slm): address code review findings for drift detection (#2834) - Use Literal["modified","source_only","deployed_only"] in DriftedFile.status - Raise ValueError (surfaced as HTTP 500) in get_default_source_dir when component dir is missing, rather than silently falling back to monorepo root - Wrap get_file_drift source_dir resolution in try/except ValueError → HTTP 500 - Add try/finally to handleCheckDrift in CodeSyncView so isDriftLoading resets on error Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…roject codebase analytics (#3436) - Backend: add optional source_id query param to all 4 analytics modules (analytics_quality, analytics_code_review, analytics_evolution, analytics_code_generation). Unknown source_id returns HTTP 404 via lazy-imported resolve_source_root helper. Each module gains a _resolve_source_or_404 helper with deferred import to avoid loading the full codebase_analytics package at module init time. - Router: move code-quality, code-review, evolution, code-generation routes as children of codebase/:sourceId. Old flat paths redirect to /analytics/codebase (project picker). - AnalyticsView.vue: remove the 4 now-redundant global nav tabs and their computed active-state properties. - CodebaseAnalytics.vue: add per-project sub-tab bar (Overview, Code Quality, Code Review, Evolution, Code Generation) with router-view outlet for child routes. Adds computed active-state properties. - Dashboard components: read sourceId from useRoute().params.sourceId and append ?source_id=<id> to every API call. Adds project subtitle to each dashboard header. - useEvolution composable: accept optional sourceId parameter and merge it into all API request params. - Tests: 4 co-located test files covering helper functions and the source_id 404 guard for all 4 backend modules (47 tests pass). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Old /analytics/code-quality etc. tabs were removed from nav — no redirects needed, the paths simply don't exist anymore. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…s files - aiohttp >=3.13.3 → >=3.13.4 (autobot-backend) - anthropic >=0.86.0 → >=0.87.0 (autobot-backend, infra/shared/config) - vllm >=0.18.0 → >=0.19.0 (requirements.txt, infra/shared/config) - cryptography >=46.0.6 added explicitly to autobot-slm-backend - pyopenssl >=26.0.0 added explicitly to autobot-slm-backend Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…rce_id on project nav (#3436) Passing sourceId.value froze the string at setup time. Navigating between /codebase/proj-A/evolution and /codebase/proj-B/evolution without unmount would keep sending source_id=proj-A to all API calls. Pass the ComputedRef itself; useEvolution reads .value lazily in withSourceId() via isRef() so it always reflects the current route param. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
AutoBot Phase Validation ResultsSystem Maturity: 0.0% Phase Status:Recommendations: |
✅ SSOT Configuration Compliance: Passing🎉 No hardcoded values detected that have SSOT config equivalents! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Merges 83 commits from
Dev_new_guiintomain. All commits reviewed and passing.This session (reviewed by code-reviewer agent)
sourceIdroute param; 4 backend modules gainsource_idvalidation; 47 co-located testsComputedReftouseEvolutionto prevent stalesource_idon project navigation (arch(analytics): merge code-quality/review/evolution/generation into per-project codebase analytics #3436)aiohttp→ 3.13.4,anthropic→ 0.87.0,vllm→ 0.19.0; explicitcryptography≥ 46.0.6 andpyopenssl≥ 26.0.0 pins in slm-backendRecent prior sessions
Follow-on issues filed
_resolve_source_or_404to shared analytics helperCode review verdict
✅ All session commits reviewed — one reactivity bug found and fixed before this PR.