Skip to content

Promote Dev_new_gui → main (2026-07-15 tech-debt drain + dependabot targeting fixes) - #11767

Merged
mrveiss merged 627 commits into
mainfrom
Dev_new_gui
Jul 15, 2026
Merged

mrveiss merged 627 commits into
mainfrom
Dev_new_gui

Conversation

@mrveiss

@mrveiss mrveiss commented Jul 15, 2026

Copy link
Copy Markdown
Owner

Thinking Path

Owner-approved promotion (2026-07-15). Two of today's fixes only take effect from the default branch: the dependabot auto-retarget workflow (#11696/PR #11724) and the dependabot.yml rules (websockets/@pinia caps — stale main config caused today's unsatisfiable groups #11721/#11746). main also carries 93 open dependabot security alerts whose fixes largely already sit on Dev_new_gui (verified today on #11715/#11716 — every pin superseded).

What Changed

Everything merged to Dev_new_gui since the last promotion, including today's drain: 28 tech-debt issues closed across 22 PRs (umbrella #11725) — dependabot retarget workflow, conftest/test-rot repairs (integration suite now 541/0/0), celery queue coverage, singleton + provider + registry + AgentRegistry + visibility/authz consolidations, sandbox stderr split, restart health poll + rollback, and the credential-redaction security fix (#11762).

Verification

Model Used

Claude Fable 5

mrveiss and others added 30 commits July 8, 2026 04:31
…very + stub Redis in tests (#11144)

4 tests in tests/orchestration/test_causal_error_recovery.py failed on Dev_new_gui: FailurePatternDetector and sibling CausalErrorRecovery call .get()/.smembers()/.incr() on _get_redis(), which returns None when the circuit breaker is open (Redis unavailable in CI). The None deref raised AttributeError swallowed by a broad except, so learn/detect/record silently no-opped. Runtime: guard 'if redis is None' in 7 methods across both classes, logging explicit '... degraded — Redis unavailable' and returning safe defaults. Tests: inject minimal in-memory async+sync fake Redis so learn→detect→statistics and the feedback loop roundtrip without a live Redis. 20/20 file, 225 orchestration pass; black/isort/compile clean.
…1216)

ChatWorkflowManager._current_lightweight_mode was set on the shared singleton at loop entry, reset in finally, and read during streaming — so two concurrent drivers of _execute_llm_continuation_loop (a real lightweight chat + the internal delegation subagent) could interleave and mis-tag the lightweight_mode_used cost badge. Replace the instance attribute with a module-level task-local ContextVar: each asyncio task carries its own value (concurrency isolation) and token-based set/reset restores the caller's value for nested drives — no hot-path parameter threading. Adds test_lightweight_mode_isolation.py proving concurrent drivers don't clobber (fails under the old implementation). black/isort/compile clean.
…Mixin (#11244)

Both async tests imported the removed LLMHandler class (renamed to LLMHandlerMixin in the role-based restructuring) and failed with ImportError. They were half-migrated — already calling the current _prepare_llm_request_params — so only the import/instantiation was stale. Instantiate LLMHandlerMixin via __new__ (the tests mock every method they touch) and mock the newer _discover_ollama_from_slm() to return None so it falls back to the mocked endpoint. Full file now 6 passed (was 4 passed, 2 ImportError). black/isort clean.
… stale resolver tests (#11246)

_resolve_web_fetch_cache_ttl reads config.misc.web_fetch_cache_ttl (a str SSOT field defaulting to ''), but the guard only checked 'is None' — so the unset (common) case hit int('') → ValueError → logged a WARNING on every call and at import. Treat empty/None as 'use default' silently; only a non-empty non-integer value warns. The resolver tests still patched os.environ but the resolvers read config.misc (loaded once at import), so overrides never applied (test_env_override failed even in isolation; siblings passed by accident). Patch config.misc.* instead; reframe the MaxBytes 'invalid string' case to the zero-fallback path. test_cache.py now 22 passed (was 20/2); no spurious warning when unset. black/isort clean.
…tive ports (#11224)

Recurring SLM auditor: agent port_scanner captures bind address; asyncio loop flags sensitive+non-loopback ports as SecurityEvent (metadata only), deduped per node. PortInfo schema declares address so heartbeat ingest keeps it. 32 tests. Verified locally (black/flake8/pytest green; Semgrep OSS passed); required checks pending on backlogged self-hosted runner.
docs/developer/AGENT_MATURITY_LEVELS.md mapping the one-agent→specialists→orchestrator→automated-team ladder to concrete AutoBot constructs; linked from docs README. All references verified; docs-only.
#11089)

find_similar_trajectories only isolated by tenant_id (#11015). In single-company mode tenant_id/org_id is frequently empty/identical across users, so a low-privilege user's trajectory could be retrieved into a different user's plan (intra-tenant cross-user injection). Add a user_id retrieval filter — ChromaDB where-clause ($and with tenant) + client-side backstop — gated by AUTOBOT_TRAJECTORY_USER_SCOPED (default TRUE = strict isolation; false to opt back into org-level shared learning). Thread user_id from both callers (orchestrator, workflow_planner); user_id already captured on write. 4 new tests + wiring test green; black/isort/compile clean. (code-quality red = pre-existing repo-wide Ansible drift #1629 on base, unrelated.)
The code-quality 'Check Ansible agent code drift (#1629)' step failed repo-wide because the canonical autobot-slm-backend/slm/agent/{agent.py,port_scanner.py} gained the GH#11224 security-posture-audit bind 'address' feature but the Ansible role copy was never synced — so ansible-deployed SLM agents lacked the #11224 bind-address capture (fleet audit inert on them). Synced the two canonical files into ansible/roles/slm_agent/files/slm/agent/. detect-agent-code-drift.sh reports 'in sync'; code-quality now green (was the repo-wide failing step). Both files py_compile.
…te + register (#11249)

BaseProvider.chat_completion is a concrete wrapper (rate-limiter + backoff) around the @AbstractMethod _chat_completion_impl. Five providers still OVERRODE the concrete chat_completion and never implemented the abstract hook → class stayed abstract → TypeError: Can't instantiate abstract class → registration threw (caught at debug) → provider silently missing. On Ollama-only deployments all LLM chat was dead ('No available provider'). Renamed chat_completion → _chat_completion_impl in OllamaProvider, CustomOpenAIProvider, GroqProvider, HuggingFaceProvider, VLLMBaseProvider (+ test MockProvider) so they run inside the base wrapper. Added AST-based TestProviderConcreteness guard. All 5 verified concrete; 6 tests pass; black/isort/compile clean.
… disposal policy (#11129)

Phase 2 of Company OS #11129. Projects gain an active→archived→pending_disposal→disposed lifecycle (replacing hard delete), governed by an SLM-configurable disposal policy (retention + optional second-pair-of-eyes approval; default immediate). Disposal deletes the linked non-shared codebase-analytics CodeSource (clone + index) but never the GitHub repo.

Backend: lifecycle columns + merge migration (unifies pre-existing #11253 double head); delete_source_and_cleanup service; project_disposal cascade; disposal_policy SLM reader; archive/restore/dispose endpoints + DELETE reroute (emits approval_requested); celery-beat disposal sweep. Frontend: SLM disposal-policy panel; Company OS archive/delete/restore UI + i18n (11 locales).

Reviewed via subagent-driven development (8 tasks + per-task reviews + Opus whole-branch review: MERGE). Fixed 2 production bugs found in review (post-commit session.refresh; NULL disposal_scheduled_at sweep exclusion). LLC suite 1096 passed. P3 tracked in #11271.

Closes #11129
…erriding the wrapper) — Ollama/chat was dead (#11250)

BaseProvider.chat_completion is a concrete wrapper (rate-limiter + backoff)
around the abstract _chat_completion_impl. Five providers overrode the wrapper
instead of implementing the abstract, leaving __abstractmethods__ non-empty so
the class could not instantiate — registration threw (caught at debug) and the
provider silently vanished. With Ollama gone and Bedrock unconfigured, the
registry had no available provider and ALL chat failed (Company OS CEO chat
returned only the clarify fallback).

Rename the override to _chat_completion_impl in OllamaProvider, CustomOpenAI,
Groq, HuggingFace, VLLMBase; they now also run inside the base rate-limit/backoff
wrapper. Verified all five __abstractmethods__ empty; Ollama registers + chats live.
…1258) (#11259)

The code-sync drift/resolve path synced code + pip + restart but skipped
Alembic — so a merge that added DB columns deployed the new ORM but left the
schema stale (UndefinedColumnError → 500s; Company OS went down twice on
llc_work_items.requires_approval_before and llc_projects.code_source_id until
migrations were applied by hand).

Add _run_alembic_migrations() to _run_post_sync_steps for backend components
that ship migrations (autobot-backend), between pip-install and restart, so the
schema is current before the app starts. Uses 'upgrade heads' (tolerates
parallel-branch multiple heads), loads the deployed .env for DATABASE_URL, and
surfaces failures loudly in the step log + backend logs (non-fatal to the sync).
…aise test passes (#11248) (#11273)

test_raises_on_4xx_response constructed aiohttp.ClientResponseError(None, None,
status=400) — request_info=None makes str(exc) raise (it reads
request_info.real_url), so the except block's logger.error(..., exc) crashed with
a secondary exception before _send_webhook's real 're-raise' reached the caller,
and pytest.raises(ClientResponseError) never saw the expected error. The service
code is correct (log + raise); only the test's mock exception was malformed.

Construct a proper RequestInfo (url/method/headers/real_url) so str(exc) works.
Verified: notification_service_test now 45 passed on BOTH py3.10 and py3.12 (was
1 failed). One item off the #11248 test-remediation umbrella. black/isort clean.
…11261) (#11267)

* feat(chat): wire trajectory learning into the single-agent chat loop (#11261)

* Auto-fix: code formatting

Applied Black, isort, and autoflake to match code-quality checks.
Triggered by workflow auto-fix-formatting.yml.

* fix(chat): lazy capture semaphore, bounded retrieval, capture after memory enqueue (#11261)

* Auto-fix: code formatting

Applied Black, isort, and autoflake to match code-quality checks.
Triggered by workflow auto-fix-formatting.yml.

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…nce (#11262) (#11268)

* feat(workers): priority tiers so audit preempts low-priority maintenance (#11262)

* Auto-fix: code formatting

Applied Black, isort, and autoflake to match code-quality checks.
Triggered by workflow auto-fix-formatting.yml.

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
… detector (#11264) (#11274)

* feat(security): confidence-gated hard-block mode for prompt-injection detector (#11264)

* Auto-fix: code formatting

Applied Black, isort, and autoflake to match code-quality checks.
Triggered by workflow auto-fix-formatting.yml.

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…11265) (#11275)

* feat(security): SHA256 file-integrity manifest verified at startup (#11265)

* Auto-fix: code formatting

Applied Black, isort, and autoflake to match code-quality checks.
Triggered by workflow auto-fix-formatting.yml.

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…11276)

* feat(delegation): harden governed delegation for enablement — depth/fan-out guards, observability, validation plan (#11266)

* Auto-fix: code formatting

Applied Black, isort, and autoflake to match code-quality checks.
Triggered by workflow auto-fix-formatting.yml.

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…fixes 37/38 (#11248)

rag_service_events_test patched services.rag_service.publish_live_event, but the code calls publish_event (from events.bus; no publish_live_event exists) → every patch raised AttributeError at setup (whole file erroring). Renamed the 14 patch targets to publish_event + fixed the matching stale docstring in rag_service.py. 37 of 38 tests now pass (1 residual per-test mock-interception anomaly flagged on #11248). Test-only + docstring change. (smoke-test/hardened red = pre-existing intermittent 'autobot-slm container unhealthy' compose flake — base Dev_new_gui fails it too; unrelated to this diff; code-quality/SAST/startup/Unit all green.)
…ents (#11277) (#11281)

* docs(skills): design spec for scoped + shareable custom skills and agents (#11277)

* docs(skills): T0+T1 implementation plan for scoped/shareable skills (#11277)
…smoke-test flake (#11283) (#11284)

The required smoke-test failed ~60% of runs (base included) at compose startup
with 'container autobot-slm is unhealthy', forcing an admin-bypass on every PR
and masking real regressions. SLM (FastAPI + model/registry init) can exceed the
60s start_period on the busy shared self-hosted runner, so failing healthchecks
counted before it was ready. Bump start_period to 120s to match autobot-backend
— strictly more tolerant of slow startup, no other behaviour change.
…ICAL path (#11248)

Two #11248 items. grounded_agent._reconstruct_response matched claims case-sensitively, so LLM-extracted claims differing in case from the source silently got no KB-source annotation; now matches case-insensitively (re.IGNORECASE) while preserving the response's original casing. test_causal_inference test_critical_severity: the code intentionally downgrades CRITICAL->DEGRADED when a high-confidence fix exists (documented); lower the test's intervention below that threshold to verify the true CRITICAL path with zero behaviour change. Verified py3.10 + py3.12. (smoke-test/hardened red = the pre-existing autobot-slm startup crash fixed separately in #11286, unrelated to this diff; all other required checks green.)
…er — SLM startup crash (#11283)

The smoke-test 'flake' was a deterministic autobot-slm startup crash: autobot_shared/logging_manager._get_config_manager() did 'from config import config_manager', which the autobot-slm-backend config.py doesn't provide → ImportError at startup → uvicorn never served /api/health → compose unhealthy → smoke-test red. Wrap the lazy import in try/except; fall back to a _ConfigManagerFallback stub whose .get(key, default) returns the default, so logging uses built-in defaults instead of crashing. Every logging call site already passes a default. VERIFIED: smoke-test now PASSES (SLM container boots healthy). Fixes the repo-wide smoke-test flake + any SLM deploy using file logging.
…igrations from scheduler discovery (#11289)

test_scheduler_registry::test_all_scheduler_files_registered failed: 2 real LLC background schedulers (llc/scheduler/heartbeat_scheduler.py, routine_scheduler.py — both started in initialization/lifespan) were absent from services/scheduler_registry.REGISTRY, and the discovery glob wrongly matched an Alembic migration. Registered both LLC schedulers (asyncio_per_worker, 5s poll) and excluded /migrations/ from _discover_scheduler_files(). 5/5 tests pass. Part of #11248.
… (#11287)

* refactor(skills): extract SkillRegistry.register_declarative() public method (#11277)

* fix(skills): re-register custom/hub skills at boot so they survive restart (#11277)

* feat(scoping): add ScopeLevel enum mirroring SecretScope (#11277)

* docs(skills): correct scoping package path to canonical autobot_shared/ (#11277)

* feat(scoping): add resource_grants table + model + migration (#11277)

* fix(scoping): drop redundant created_at redeclaration on ResourceGrant (#11277)

* feat(scoping): add is_visible() authorization rule (#11277)

* feat(scoping): add ResourceGrantStore CRUD + has_grant lookup (#11277)

* feat(scoping): add can_access() resolver + decision cache (#11277)

* Auto-fix: code formatting

Applied Black, isort, and autoflake to match code-quality checks.
Triggered by workflow auto-fix-formatting.yml.

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…hlex hardening (#11291) (#11292)

* fix(security): close ProcessAdapter host RCE — gate off + exec + minimal env (#11059)

* harden(workspace): pids_limit fork-bomb guard + shlex exec tokenization (#11059)

* Auto-fix: code formatting

Applied Black, isort, and autoflake to match code-quality checks.
Triggered by workflow auto-fix-formatting.yml.

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
#11071) (#11295)

* fix(security): tenant-scope learned-strategy Redis stores, fail-closed (#11071)

* test(security): tenant-isolation + fail-closed coverage for learned-strategy stores (#11071)

* fix(security): thread authoritative company_id to diary learning; fix stale llm.chat mock (#11071)
…te /status (#11298)

Closes the refresh/device SSRF-allowlist bypass (#11061): llm_shared/provider_auth.OAuthAuth._refresh now validates self._token_url via require_allowlisted_https before the outbound POST (covers DeviceCodeAuth, which refreshes through the same path; the initial device poll is already API-validated). OAuth host allowlist consolidated into autobot_shared.url_safety as the single source (get_oauth_allowed_hosts, call-time env override). /status now requires check_admin_permission. Headline state/PKCE callback binding split to #11297; remaining MEDs tracked on #11061.
…ts (#11256)

Root cause: llc/tests/conftest.py replaced sys.modules['knowledge'] with a bare stub lacking a 'backends' submodule, so codebase_analytics/storage.py's module-level 'from knowledge.backends import ...' failed to collect when llc tests ran first. Fix adds a knowledge.backends stub (get_default_client/get_async_default_client) mirroring the existing embedding_cache/utils stubs. Cross-suite collection 1 error → 1237 tests; full llc suite 1099 passed, 0 regressions. Closes #11256
mrveiss and others added 21 commits July 15, 2026 12:41
#11743)

task_routes sends memory.* to the memory queue and analytics.* to the
analytics queue, but no worker in the compose deployment consumed them —
tasks sat in Redis until eviction. The Ansible systemd unit had the same
class of gap: it starts with no -Q, which in Celery means only the default
celery queue, stranding deployments/memory/analytics there too.

- celery_app.py: declare task_queues (celery, deployments, memory,
  analytics) as the SSOT queue set — fixes the no--Q systemd worker
- docker-compose.yml: worker --queues extended to the full set
- start-celery-worker.sh: --queues extended (only worker in that flavor)
- autobot-celery.service.j2: document the intentional absence of -Q
- celery_queue_coverage_test.py: guard — every task_routes target queue
  must appear in task_queues and in each launcher's --queues list
  (text-parse; celery_app is heavy/pytest-stubbed per #7766)

On-box compose smoke (enqueue memory-path task, confirm consumption) is
box-gated; config-level verification done via yaml parse + tests.
…ded in TTS health and fleet UI (#11718) (#11726)

* fix(slm/secrets): validate hf_token against HF at save time (#11718)

Probe hf_token secrets against HuggingFace's whoami-v2 endpoint when saved
via the SLM secrets API. A confirmed 401 rejects the save with HTTP 422 and
a clear message; network failures (offline installs) never block the save,
only return a non-blocking warning in the response.

An invalid/revoked hf_token previously flowed silently through to the TTS
worker, which fell back to an ungated model while still reporting healthy.

* feat(tts): expose engine_degraded in worker health (#11718)

Track HF-auth success and whether the gated (voice-cloning) weights
actually loaded, and surface both as engine_degraded + degraded_reason in
GET /health. The worker previously reported {status: healthy, model_loaded:
true} even when HF login failed and it silently fell back to the ungated
base model — operators had no signal the configured gated engine
(TTS_MODEL_ID) never deployed. status stays 'healthy' (service is up);
engine_degraded is a separate, additive signal.

* feat(slm-ui): surface tts engine_degraded state in fleet service panel (#11718)

Add a compact yellow 'Engine degraded' badge + reason line in
NodeServicesPanel.vue when a service's extra_data carries
engine_degraded (new i18n key fleet.nodeServicesPanel.engineDegraded;
autobot-slm-frontend currently ships a single en.json locale, no other
locale files exist yet in this app).

Wire the pass-through end to end: reconciler._upsert_service now merges
engine_degraded/degraded_reason from heartbeat svc_data into
Service.extra_data (services/service_extra_data.py, mirrors the existing
error_message handling) whenever an agent reports them, so the UI lights
up as soon as the data is available.

Note: the SLM agent does not yet probe any service's own /health endpoint
(only systemctl status) so this field is not populated end-to-end yet for
the TTS worker specifically — filed as a separate follow-up: #11723.

* fix(slm/secrets): nosec B105 on hf_token key-name constant (#11718)
…gv (#11735) (#11744)

Secret extra_vars (auto-merged stored SLM secrets, #3519) were passed as
-e key=value CLI args, readable by any local user via /proc/<pid>/cmdline
for the whole playbook run. They now go through a uid-scoped 0600 temp
JSON file passed as -e @file, cleaned up in the same finally block as the
per-run temp inventory.
#11723) (#11749)

health_collector now issues a short-timeout local HTTP GET to the /health
endpoint of app-health-capable services (starting with autobot-tts-worker)
and folds engine_degraded/degraded_reason into the discovered-service dict.
Non-fatal on any failure. Completes the #11718 pipeline: worker /health ->
agent heartbeat -> reconciler engine_degraded_fields -> Service.extra_data
-> NodeServicesPanel degraded badge.
…start path (#11496) (#11745)

* fix(deploy): post-restart health poll + rollback in autobot_shared/library restart path (#11496)

* Auto-fix: code formatting

Applied Black, isort, and autoflake to match code-quality checks.
Triggered by workflow auto-fix-formatting.yml.

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…11517) (#11747)

One OpenAICompatibleProvider now owns the request-building, response-mapping,
tool-call parsing, streaming, and model-listing flow shared by the five
providers speaking the OpenAI chat-completions dialect. Each concrete provider
is a thin subclass carrying only its genuine deltas:

- openai: SSOT key fallback chain, optional base_url, reasoning-effort
  mapping (#9017), prompt-cache payload normalisation (#7368)
- groq: groq SDK client, historical omission of top_p
- custom_openai: mandatory base_url, permissive api_key default,
  per-instance provider naming
- openrouter: gateway base URL default, api_kwargs penalty forwarding,
  empty static model fallback
- nous: HF token chain, HF inference base URL, 2048 default max_tokens,
  api_kwargs penalty forwarding, NOUS_MODELS fallback

Drift bugs fixed by the shared flow (#10582-class divergence):
- openrouter/nous accessed .role/.content on dict messages (AttributeError
  on every call); nous passed nonexistent model_name=/provider_name= kwargs
  to LLMResponse (TypeError violating the must-not-raise contract)
- openrouter/nous gain tool wiring, finish_reason/processing_time/
  request_id/total_tokens population, and reasoning_content capture
- streaming now builds the same payload as non-streaming (top_p/stop/tools
  were silently dropped from openai/groq streams) and raises on error
  instead of yielding error text into the output stream (openrouter/nous)

Breaker seam untouched: circuit-breaker accounting stays in
BaseProvider._guarded_completion (GH#11488); _chat_completion_impl still
returns errors via LLMResponse.error. Module paths, class names, provider
ids, and registry/adapter construction sites are unchanged.
…ile_push fixtures, watchdog dep (#11687) (#11751)

* fix(test): repair integration env-rot clusters — JSONB-on-SQLite, mobile_push fixtures, watchdog dep (#11687)

- tests/integration/conftest.py: @compiles(JSONB|ARRAY, sqlite) -> JSON so Base.metadata.create_all works on in-memory SQLite (retention 13E, mobile_push 15E, budget 4E)
- test_mobile_push.py: patch the real seam (user_management.database.get_async_session_factory — module imports it function-locally), sync session-factory mock (async-def handed 'async with' a coroutine), real EncryptionService with injected test key, stub _send_apns/_send_fcm transports (tests were written against the old always-succeed stubs), fix _send_web_push positional ttl assert
- test_budget_hard_stop.py: autouse fakeredis fixture (task_claim_race pattern) instead of env ANALYTICS Redis (placeholder host locally); AgentWakeupRequest aligned to current model (runtime_state_id/reason, source/trigger_time removed); expire_all before cross-session re-select
- test_execution_snapshot_api.py: dependency_overrides delegates so @patch on module attrs reaches Depends-captured callables (conftest auth-stub MagicMock made FastAPI demand args/kwargs query params -> 422); align list_by_user + generic 403 'Access denied' contract
- documentation_watcher_staleness_test.py: realign to async redis seam, function-local get_doc_indexer_service, enqueue-based _handle_update (#4453); pre-import patched modules so patch() hits the canonical sys.modules entry
- requirements-ci/utilities.txt: add watchdog==6.0.0 (services/documentation_watcher imports it; test file failed collection)
- llm_shared/fallback_chain.py: pre-existing bug exposed by suite — manager only resolved chains keyed by primary model, so multi-hop fallback died after the first hop; scan chains for mid-chain models (test_multiple_fallback_hops)

tests/integration: 541 passed, 0 failed, 0 errors, 24 skipped (pre-existing 'Redis not available' guards)

* Auto-fix: code formatting

Applied Black, isort, and autoflake to match code-quality checks.
Triggered by workflow auto-fix-formatting.yml.

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Bumps the all-dependencies group in /autobot-infrastructure/shared/mcp/tools/context7 with 1 update: [typescript](https://github.com/microsoft/TypeScript).


Updates `typescript` from 6.0.3 to 7.0.2
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Commits](https://github.com/microsoft/TypeScript/commits)

---
updated-dependencies:
- dependency-name: typescript
  dependency-version: 7.0.2
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: all-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
… base (#11664) (#11752)

* refactor(registries): unify credential-gated registries behind shared base (#11664)

* Auto-fix: code formatting

Applied Black, isort, and autoflake to match code-quality checks.
Triggered by workflow auto-fix-formatting.yml.

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…apability lookup (#6828) (#11756)

* refactor(orchestration): resolve AgentRegistry naming fragmentation — canonical service + renamed distinct registries (#6828)

* chore(types): regenerate api.ts from backend OpenAPI schema

Auto-regenerated (py3.14) to match the backend schema so the required
verify-generated-types gate passes. Triggered by auto-fix-generated-types.yml.

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…11290 part 1 (#11758) (#11760)

* test(authz): parity decision-matrix tests for secret + knowledge access (#11290)

* refactor(authz): canonical visibility-scope enum + shared principal primitives (#11290)

* Auto-fix: code formatting

Applied Black, isort, and autoflake to match code-quality checks.
Triggered by workflow auto-fix-formatting.yml.

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…mponents (#11727) (#11757)

* i18n(slm-frontend): wrap hardcoded UI strings in $t() (#11727)

Wrap all user-visible strings in SecretsSettings.vue and RolesView.vue
(buttons, headings, paragraphs, placeholders, aria-labels, confirm()
messages) in $t(), adding matching keys to src/locales/en.json.

* i18n(slm-frontend): wrap hardcoded UI strings in $t() (#11727)

Sweep FleetOverview.vue and AddNodeModal.vue — buttons, headings,
aria-labels, placeholders, confirm()/alert() messages, and dynamic
computed strings — adding matching keys to src/locales/en.json.

* i18n(slm-frontend): wrap hardcoded UI strings in $t() (#11727)

Sweep FindingsPolicySettings.vue and ToolsView.vue — headings,
labels, buttons, aria-labels, placeholders, and dynamic result
strings — adding matching keys to src/locales/en.json.

* i18n(slm-frontend): wrap hardcoded UI strings in $t() (#11727)

Sweep LoginView.vue — aria-labels, placeholders, button loading
states, and the SSO-login error message — adding matching keys
to src/locales/en.json.

* i18n(slm-frontend): wrap hardcoded UI strings in $t() (#11727)

Sweep Sidebar.vue — nav item labels, aria-labels, fleet-health
status, high-contrast toggle, and user/logout chrome — adding
matching keys to src/locales/en.json.

* i18n(slm-frontend): wrap hardcoded UI strings in $t() (#11727)

Sweep NodeCard.vue — dynamic aria-labels/titles, health-metric
labels, relative last-seen text, and pluralized badges — adding
matching keys to src/locales/en.json.

* i18n(slm-frontend): wrap hardcoded UI strings in $t() (#11727)

Automated sweep of remaining hardcoded user-visible strings across
src/views and src/components (68 files) — text nodes and
title/placeholder/alt/aria-label/label attributes wrapped in $t()
with new flat-dotted en.json keys mirroring each file's directory
namespace, reusing identical existing keys within the same namespace.

Handles multi-line text nodes, PEM/cert placeholder newlines, and
split-sentence markup (inline <code> left untranslated).

* i18n(slm-frontend): wrap dynamic/ternary hardcoded UI strings (#11727)

Second wave of the i18n sweep: mixed static-text+interpolation nodes
(e.g. '{{ count }} Nodes'), ternary/fallback string literals in
answer position (e.g. cond ? 'Valid' : 'Invalid'), and dynamic
backtick-templated attributes (aria-label/title/message) across
src/views and src/components. Reuses existing en.json keys for
identical strings; comparison operands and technical enum values
(option value=, service/repo identifiers, protocol/signal names)
are left untranslated by design.

Fixes a SortKey type regression in NodeMetricsGrid.vue introduced
mid-sweep (sort-key argument to getSortIcon() must stay a literal,
not go through $t()).
… _real_load_and_bind (#11730, #11731) (#11763)

* refactor(test): fold _load_llm_sub + npu_profile_suggester loads onto _real_load_and_bind (#11730, #11731)

* chore(types): regenerate api.ts from backend OpenAPI schema

Auto-regenerated (py3.14) to match the backend schema so the required
verify-generated-types gate passes. Triggered by auto-fix-generated-types.yml.

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…lly redact (#11762) (#11764)

* fix(security): normalize SENSITIVE_KEYS so api_key dict entries actually redact (#11762)

* chore(types): regenerate api.ts from backend OpenAPI schema

Auto-regenerated (py3.14) to match the backend schema so the required
verify-generated-types gate passes. Triggered by auto-fix-generated-types.yml.

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…etScope name collision (#11759) (#11765)

* refactor(authz): rename legacy chat-secrets scope enum — resolve SecretScope name collision (#11759)

* Auto-fix: code formatting

Applied Black, isort, and autoflake to match code-quality checks.
Triggered by workflow auto-fix-formatting.yml.

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…sible primitive (#11290) (#11766)

* test(authz): extend parity matrices — null-session grant, non-list JSONB guards, anon-owner, cross-subsystem scope rows (#11290)

* refactor(authz): secrets + knowledge access decisions on shared is_visible primitive (#11290)

* chore(types): regenerate api.ts from backend OpenAPI schema

Auto-regenerated (py3.14) to match the backend schema so the required
verify-generated-types gate passes. Triggered by auto-fix-generated-types.yml.

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
merge(main): absorb out-of-process main commits — unblock promotion #11767
@github-actions

Copy link
Copy Markdown
Contributor

✅ SSOT Configuration Compliance: Passing

🎉 No hardcoded values detected that have SSOT config equivalents!

@mrveiss
mrveiss merged commit 847f0ed into main Jul 15, 2026
37 of 42 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

AutoBot Phase Validation Results

System Maturity: 96.5%

Phase Status:

PASS Phase 1: Core Infrastructure: 100.0%
PASS Phase 2: Knowledge Base and Memory: 100.0%
IN PROGRESS Phase 3: LLM Integration: 66.7%
PASS Phase 4: Security and Authentication: 100.0%
PASS Phase 5: Agent Orchestration: 100.0%
PASS Phase 6: Enhanced UI/UX: 100.0%
PASS Phase 7: Testing and Validation: 100.0%
PASS Phase 8: Advanced Features: 100.0%
PASS Phase 9: Multi-Modal AI: 100.0%
PASS Phase 10: Production Readiness: 100.0%

Recommendations:

  • 🟡 MEDIUM: Phase 3: LLM Integration requires attention (66.7% complete): Review and implement
  • ✅ System is production-ready - consider advanced features and scaling: Review and implement

Comment thread autobot-backend/api/auth.py Dismissed
Comment thread autobot-backend/api/provider_auth.py Dismissed
Comment thread autobot-backend/api/provider_auth.py Dismissed
Comment thread autobot-backend/chat_workflow/llm_handler.py Dismissed
"""Fetch Reddit posts; raise BackendError on network, HTTP, or parse failure."""
headers = {"User-Agent": _USER_AGENT}

if request.url and "reddit.com" in request.url:
Comment thread autobot-backend/services/credential_write.py Dismissed
Comment thread autobot-backend/services/credential_write.py Dismissed
Comment thread autobot-backend/services/credential_write.py Dismissed
Comment thread autobot-backend/tests/content_reach/backends/test_browser.py Dismissed
Comment thread autobot-backend/tests/content_reach/test_url_guard.py Dismissed
@codecov

codecov Bot commented Jul 15, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

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.

3 participants