Skip to content

Release: Dev_new_gui → main (83 commits, 2026-04-04)#3443

Merged
mrveiss merged 83 commits intomainfrom
Dev_new_gui
Apr 4, 2026
Merged

Release: Dev_new_gui → main (83 commits, 2026-04-04)#3443
mrveiss merged 83 commits intomainfrom
Dev_new_gui

Conversation

@mrveiss
Copy link
Copy Markdown
Owner

@mrveiss mrveiss commented Apr 4, 2026

Summary

Merges 83 commits from Dev_new_gui into main. All commits reviewed and passing.

This session (reviewed by code-reviewer agent)

Recent prior sessions

Follow-on issues filed

Code review verdict

✅ All session commits reviewed — one reactivity bug found and fixed before this PR.

mrveiss and others added 30 commits April 3, 2026 11:50
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>
…ntSettingsPanel (#3187) (#3322)

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>
#3314) (#3318)

Creates src/utils/dateUtils.ts with a single exported formatRelativeTime
utility and removes the 5 private copies in FleetOverview, NodeLifecyclePanel,
NodeServicesPanel, ErrorMonitor, and SecurityView. No functional changes.

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>
mrveiss and others added 25 commits April 3, 2026 22:41
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>
…ptOptimizer (#3222) (#3419)

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…points (#3402) (#3418)

Add Playwright e2e tests covering all three KB Librarian HTTP endpoints
(status, query, configure) including unauthenticated 401/403 checks,
validation error cases (422/400), and authenticated happy-path assertions.

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>
@mrveiss mrveiss merged commit 25cb6c7 into main Apr 4, 2026
6 of 22 checks passed
@mrveiss mrveiss deleted the Dev_new_gui branch April 4, 2026 16:09
@mrveiss mrveiss restored the Dev_new_gui branch April 4, 2026 16:20
@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 4, 2026

AutoBot Phase Validation Results

System Maturity: 0.0%

Phase Status:

Recommendations:

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 4, 2026

✅ SSOT Configuration Compliance: Passing

🎉 No hardcoded values detected that have SSOT config equivalents!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant