Skip to content

chore(train): merge train 2026-10-12 #7 — 4 approved PRs incl. sandbox hardening and audit_logs SoR (#17225) - #18401

Closed
mrveiss wants to merge 45 commits into
mainfrom
train-2026-10-12-7
Closed

mrveiss wants to merge 45 commits into
mainfrom
train-2026-10-12-7

Conversation

@mrveiss

@mrveiss mrveiss commented Oct 12, 2026

Copy link
Copy Markdown
Owner

Thinking Path

Merge train #7, under the owner decisions of 2026-10-11 and 2026-10-12 (every approved PR lands through a train). It is built on current main and lands with a merge commit. The drift-prone guards were pre-run locally on the combined tree: the reach declarations pass (555) after the re-pins below. The only remaining local failures are the three infra_validators_repaired_18289 cases. They need aiofiles, which this machine has only in user site-packages, and the test's isolated -I interpreter hides those. CI installs the declared set into the interpreter, so this run is their real check.

What Changed

Constituents (#PR @ approved head):

Train-only commits:

Refs #17267
Refs #18240
Refs #15469
Refs #17856
Refs #17959
Refs #18289
Refs #17225

Verification

Model Used

Claude Opus 5.5 (merge orchestration). Constituent reviews used Sonnet and Opus by risk tier.

🤖 Generated with Claude Code

…w-privileges and a pids limit from the shared hardening builder (#17267)

SECURITY-SENSITIVE: container runtime privileges; review on Opus.

Owner decision (c) on #17267: the non-behavioural subset only.

Changed:
- container_hardening: new baseline_hardening_kwargs() (security_opt
  no-new-privileges, cap_drop ALL, pids_limit); hardening_kwargs() now composes
  it, output byte-identical. CONTAINER_PIDS_LIMIT (env AUTOBOT_WORKSPACE_PIDS_LIMIT,
  default 512) moves here; the workspace constant aliases it.
- docker_backend.py: both containers.run sites (cold start, snapshot restore)
  add **baseline_hardening_kwargs().
- container_pool.py: its only caller passes no container kwargs, so pooled
  containers were unhardened; the same subset is applied, and the floor wins
  over caller kwargs.
- Guard extended: each docker_backend containers.run must spread the builder;
  pool and backend are consumers; contrast cases added.
- Pin tests assert the full kwargs of every run site; they pass on the parent
  with the old kwargs and now differ by exactly the three keys.

Unchanged: network, read_only, mounts/volumes, memory, cpus, user, environment.

Refs #17267 — option (b) full hardening stays open
…no network and a read-only root unless a named opt-in says otherwise (#17267)
…that widen their reach (privileged, devices, host namespaces, docker socket or host-root binds) (#17267)
…cker-py run kwarg and every cold start raised TypeError (#17267)
…led; main's entries plus this branch's one scope (#17267)
…, adapt audit_logger, route SecurityLayer, one retention table (#17225)

Owner decision 2026-10-10, D2/D3/D5/D6:
- D2: services/audit/audit_log.py, services/event_log.py and
  knowledge/audit_log.py are deleted; their vocabularies move to
  services/audit/taxonomy.py and every caller uses the canonical service
  (voice_bundle_admin and auth via emit_compliance; the knowledge audit API
  via services/audit/knowledge_view.py, which ends the double write). Old
  keys are left to expire by their TTL; no stored data is touched.
- D3: services/audit_logger.py is an adapter: an AuditEntry is recorded as a
  SECURITY AuditEvent and read back from the canonical trail.
- D5: services/audit/retention.py is the one retention table; projection TTLs
  and the one purge path (services/audit/purge.py) read it. The nightly task
  no longer trims every audit:* zset at one period.
- D6: SecurityLayer.audit_log records through emit_security; the JSONL file
  is no longer written or read.

Fixes found on the way: audit.emit was shadowed by an EventType bridge, so
emit(AuditEvent(...)) recorded a COMPLIANCE event named after the event's
repr (7 producers); a producer on a thread with no loop now hands its write
to the serving loop; reads scan newest-first; an unreadable trail raises
instead of reading as empty (#13258).

The writer guard detects audit ORM rows, INSERT INTO ...audit and file
writes in modules binding an audit path, which found five stores the first
inventory missed. D1 (which Postgres table) and D4 (daemon key move) are
open; see docs/developer/AUDIT_SYSTEMS.md.
…its projection (#17225)

Owner decision 2026-10-11 on D1: extend the existing Postgres audit_logs
table rather than add audit_event.

- Additive schema: category (NOT NULL, server default 'security'), actor,
  session_id, resource_ref and two indexes. Alembic 20261011_098 on the
  backend; add_audit_logs_canonical_columns on the SLM's slm_users database,
  which maps the same shared model. No existing row is rewritten; the
  pre-existing twelve columns are pinned unchanged.
- One row constructor, autobot_shared/user_management/audit_rows.audit_row,
  used by the canonical service and by the shared RBAC denial, organisation
  and team writers, so both processes write one schema. The backend and
  SLM user_service.py still construct AuditLog directly; they move onto
  audit_row after #18267, which rewrites both files.
- services/audit/store.py: record() writes the row, then the Redis
  projection; every query is one SQL statement on audit_logs;
  rebuild_projection() reconstructs the projection. store_authority declares
  audit_trail POSTGRES with a REDIS projection.
- .secrets.baseline: drop the entries for the two deleted legacy modules.
…ontrol plane map has an audit-trail row (#17225)

with audit_rows.audit_row, so every audit_logs row has one constructor.
The writer guard drops the two user_service allowances and fails on any
AuditLog(...) outside the row builder (the SLM's own node-audit model
excepted).

- CONTROL_PLANE_MAP.md: row 18, Audit trail, Enforced.
- AUDIT_SYSTEMS.md: D1 done; rows 5 and 10-12 point at #18284, #18285
  and #18286.
- symbol_fork_baseline.json: drop KnowledgeAuditLog, audit_record, emit
  and query_events, which are no longer fork clusters.
- audit_rows_test records the mapping without configuring the shared
  mapper registry, which needs each backend's concrete Organization.
…r indexes concurrently (#17225)

Review of #18343:
- 20261011_098 downgrade() dropped the four new columns, deleting every
  audit value written into them since the upgrade -- a deletion path in
  the audit store (#17038). It is now a documented no-op; the columns are
  additive and harmless to leave. The SLM migration has no down path and
  says it may not grow one that drops them.
- Both index builds were plain CREATE INDEX, which blocks writes to
  audit_logs for the whole build. Alembic now uses
  postgresql_concurrently=True inside autocommit_block(); the SLM runner
  commits the columns and builds CONCURRENTLY IF NOT EXISTS on an
  autocommit connection. Both drop and rebuild an INVALID index a failed
  concurrent build left behind, so a re-run repairs rather than skips it.
- Tests: downgrade has no statements; every create/drop index call is
  concurrent and inside autocommit_block; the SLM build runs in autocommit
  with CONCURRENTLY and rebuilds an invalid leftover.
…nces, and PATCH /users/me/preferences writes only the fields it was sent (#18240)
… announcer in @autobot/ui, consumed by both apps (#18240)
…llows the account (#18240)

useUiMode owns data-ui on <html> (minimal|full) and the start preference
(last|minimal|full), writes through to localStorage, and resolves the opening
mode at login (ui_start === 'last' ? ui_mode : ui_start). theme-variant-init
sets data-ui before mount, the same CSP-safe pattern as the variant beside it.
html[data-ui="minimal"] .adv hides advanced chrome and .only-min shows only in
Minimal, both without !important (the selector is more specific than a display
utility).

usePreferences now sends and applies ui_mode, ui_start and theme_variant with the
appearance prefs. The endpoint is a partial PATCH since 0b2892a360, and the only
caller still sends every field it owns, so nothing is reset. An account
theme_variant of 'default' does not override a device that never chose one, so a
deployment pinning another build-time default keeps it.
…les (#18240)

nav.homeAria, vaultTip, preferencesTip, platformAdmin(+Aria/Tip), profileMenu,
nav.uiMode.*, settings.preferredMode.*, settings.additionalThemes.*,
ui.minimalNote and ui.minimalNoteAction, each really translated (ar, de, es, fa,
fr, he, lv, pl, pt, ur) and appended to its group; no existing key is touched.
settings.appearance.* from the plan is settings.additionalThemes.* because
settings.appearance is already a string key.

The SLM locales are regenerated by scripts/lift_locale_translations.py: its two
"Full" keys now lift a translation from the new settings.preferredMode.full.
nav.slmAdmin and nav.slmAdminTitle have no reference left in the app but stay,
append-only: the same lift derives the SLM's "SLM Admin" translation from them.
…18240)

UiModeSettingsCard (Settings > Appearance): two aria-pressed mode cards and a
Start-in radiogroup (Last used / Minimal / Full) over the same useUiMode state
the header toggle drives. ThemePresetPicker is extended, not duplicated, with an
Additional themes group (AdditionalThemesGroup) fed by the installed-theme
registry, each theme badged "Deployed via SLM" with a link to the SLM console;
EmberThemeToggle keeps the built-in variants only so no theme is offered twice.
ThemePresetPicker's inline sr-only announcer moves onto the kit useAnnounce,
which takes it from 611 to 587 lines, under the limit, so its ceiling is deleted.
SettingsView does not grow (784).
…er, UiModeToggle, ProfileMenu, MobileNavPanel and a BaseModal status panel (#18240)

Split the 290-line header and the hand-rolled status overlay out of App.vue
(1144 -> 499 lines, now under the 600 limit, so its grandfathered ceiling is
deleted). The brand is the kit BrandMark linking Home; the health dot is an
aria-hidden overlay and System status moved into the profile menu. Primary
links are Home, Chat, Knowledge, Company OS and Analytics (advanced); Automation
is pinned to the existing NavOverflowMenu. The right-hand cluster is
Secrets (advanced), Preferences, the Minimal/Full toggle and the Platform admin
shield (advanced, gated by service.management, opens the SLM console in a new
tab). Every icon has an i18n aria-label and a kit BaseTooltip. The active link
is a 2px accent underline.

config/navItems.ts stays the one registry: it gains the adv and overflow flags
and navIconItems; the profile menu loses Plugins (it lives in the SLM console
nav; INTENTIONALLY_HIDDEN records why), Secrets and Preferences; paletteNavItems
still derives from it. The mobile drawer renders the same registry. The SLM text
link, DarkModeToggle and LanguageSwitcher are no longer in the nav.

One shared useSystemStatus instance is provided by App.vue (composables/
systemStatusContext.ts) so the dot and the panel show one snapshot.

New strings are committed separately (feat(i18n)). nav.slmAdmin* stays
(the SLM locale lift derives from it). Ratchets only move down: App.vue's scoped
style, a LoginForm .logo-mark rule that had pushed distinct_class_names over its
baseline, and the raw status colours the header and panel used.
…ps it that way (#18240)

useUserStore.applyTheme/updateTheme and the profile modal's own theme buttons set
data-theme from a second preference (default light) that could disagree with
useTheme's persisted choice. They are removed, together with PreferencesPanel in
the profile modal (appearance settings live in Settings only). The meta
theme-color the store set from two hex values moves into useTheme and follows
the active theme's surface token instead.

repo_tests/single_attribute_writer_18240_test.py fails if anything but useTheme
writes data-theme, or anything but useUiMode (and its pre-mount copy in
theme-variant-init.ts) writes data-ui, with contrast pairs for the matcher and a
control that the scan sees each canonical writer.
Refs #17856 row 7

routeConfig, getAllRoutes, findRouteByPath, getNavigationMenus and RouteConfig
have zero importers: no static import, no dynamic import(), no require, no
import.meta.glob, no string path in a build/test/storybook/CI config; the only
mentions are two superseded plans under docs/superpowers. Router entries it
described are live in router/index.ts, or tracked: /monitoring and
/monitoring/system redirect to the SLM console, /monitoring/analytics is
CodebaseAnalytics, /tools/files is FileBrowser (mockup screen in step 5),
/tools/voice lives in chat voice, /monitoring/rum is #18277,
/monitoring/validation is #18278.
…overable and touch-safe, drop the double read on icon links (#18240)
…y at a fresh sign-in, never on session restore (#18240)
…alid-index probe runs only on PostgreSQL (#17225)

The writer guard's _RETIRED list named three deleted modules, which the
stranded-recorder census read as stranded entries. The census had no way
to record a path that must stay absent, so it gains one: TOMBSTONE_LEDGERS,
keyed like a census record with a reason, excluded from the stranded check
and checked the other way round -- an entry the tree holds again fails.
The guard splits the list into _RETIRED_MODULES (deleted; the tombstone)
and _RETIRED_WRITERS (adapters kept by D3/D6 that must not write again),
and asserts the deleted modules stay deleted.

_index_is_invalid in 20261011_098 queries pg_index only when the bind is
PostgreSQL (review note on #18343).
…tems

# Conflicts:
#	repo_tests/_reach_policy.py
#	repo_tests/python_file_size_ratchet_baseline.py
#	repo_tests/reach_scope_claim_17844_test.py
#	scripts/python_file_size_known_large.py
…e deleted audit modules (#17225)

The stranded-recorder census found pipeline-scripts/hardcoded_values_baseline.txt
still naming services/audit/audit_log.py, services/event_log.py and
knowledge/audit_log.py, deleted by D2. A stranded entry is a shrink that
did not happen; the three rows are removed.
…s bootstrap the backend and the repo root, 3 validators repaired, fresh_kb_setup retires (#18289)

Shared (repoint, no behaviour change): constants.* and config.API_BASE_URL/OLLAMA_URL imports in 19
modules now come from autobot_shared (network_constants, ssot_constants); knowledge_categories moves
to autobot_shared, its backend importers and the category migration follow.

Backend tools: 18 more modules put autobot-backend and the repository root on their own path (the
root is what provides autobot_shared; several had only the backend, or a wrong directory), and move
from UNCLASSIFIED to BACKEND_TOOLS. The clean-import guard now also asserts autobot_shared resolves
after the tool's own bootstrap.

Repaired against today's APIs: validate_configuration, validate-security-config, validate_chat_knowledge,
each run by a new test against the real backend.

Retired: scripts/fresh_kb_setup.py, superseded by setup/knowledge/fresh_kb_setup.py (same job, has a
test, repo_tests 14507 loads it).
… helper (#17941)

one_brand_mark_and_announcer and single_attribute_writer hand-matched comment
markers; they now use tools.lint._comment_syntax.code_lines with the file's own
suffix. The jsdoc self-test cases become real /** */ blocks, since a bare
' * x' line outside a comment is code.
audio-extension-allowlist 6106, hardcoded-colour-scan 853,
redaction-concept-census 3372, tracked-key-material 11077,
undefined-css-var-scan 1491 -- each the guard's measured mid-window value.
@coderabbitai

coderabbitai Bot commented Oct 12, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 231 files, which is 131 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

Check out review usage here.

⚙️ Run configuration
  • Configuration used: Repository: mrveiss/AutoBot-AI/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: e63c7047-4e6f-4eed-bc19-fae0d8286d61

📥 Commits

Reviewing files that changed from the base of the PR and between 13be1b4 and 47a624e.


⛔ Files ignored due to path filters (8)
  • autobot-frontend/public/favicon.svg is excluded by !**/*.svg
  • autobot-frontend/src/assets/logo.svg is excluded by !**/*.svg
  • autobot-frontend/src/types/generated/api.ts is excluded by !**/generated/**
  • autobot-slm-frontend/public/favicon.svg is excluded by !**/*.svg
  • libs/autobot-ui/src/assets/brand/mark.svg is excluded by !**/*.svg
  • pipeline-scripts/hardcoded_values_baseline.txt is excluded by !**/*_baseline.txt, !pipeline-scripts/hardcoded_values_baseline.txt
  • repo_tests/python_file_size_ratchet_baseline.py is excluded by !repo_tests/python_file_size_ratchet_baseline.py
  • scripts/python_file_size_known_large.py is excluded by !scripts/python_file_size_known_large.py

📒 Files selected for processing (231)
  • .secrets.baseline
  • autobot-backend/api/admin_retention_policies.py
  • autobot-backend/api/api_endpoint_migrations_test.py
  • autobot-backend/api/auth.py
  • autobot-backend/api/knowledge.py
  • autobot-backend/api/knowledge_audit.py
  • autobot-backend/api/knowledge_category_counts_visibility_16665_test.py
  • autobot-backend/api/security.py
  • autobot-backend/api/security_api_test.py
  • autobot-backend/api/users.py
  • autobot-backend/api/voice_bundle_admin.py
  • autobot-backend/auth_rbac_denial_audit_counted_test.py
  • autobot-backend/knowledge/audit_log.py
  • autobot-backend/migrations/versions/20261011_098_audit_logs_canonical_columns.py
  • autobot-backend/secure_sandbox_executor.py
  • autobot-backend/security/enterprise/threat_detection/ingest_13562_test.py
  • autobot-backend/security/security_api_e2e_test.py
  • autobot-backend/security/security_edge_cases_test.py
  • autobot-backend/security/security_integration_test.py
  • autobot-backend/security_layer.py
  • autobot-backend/security_layer_audit_default_test.py
  • autobot-backend/security_layer_test.py
  • autobot-backend/services/audit/__init__.py
  • autobot-backend/services/audit/audit.py
  • autobot-backend/services/audit/audit_log.py
  • autobot-backend/services/audit/audit_log_test.py
  • autobot-backend/services/audit/audit_test.py
  • autobot-backend/services/audit/knowledge_view.py
  • autobot-backend/services/audit/knowledge_view_test.py
  • autobot-backend/services/audit/projection.py
  • autobot-backend/services/audit/purge.py
  • autobot-backend/services/audit/retention.py
  • autobot-backend/services/audit/store.py
  • autobot-backend/services/audit/taxonomy.py
  • autobot-backend/services/audit_logger.py
  • autobot-backend/services/audit_logger_test.py
  • autobot-backend/services/docker_task_workspace.py
  • autobot-backend/services/event_log.py
  • autobot-backend/services/execution/container_pool.py
  • autobot-backend/services/execution/docker_backend.py
  • autobot-backend/system_integration_test.py
  • autobot-backend/tasks/audit_log_retention.py
  • autobot-backend/tests/api/test_user_preferences_partial_patch.py
  • autobot-backend/tests/fixtures/audit_trail.py
  • autobot-backend/tests/test_container_hardening_17267.py
  • autobot-backend/tests/test_execution_backends.py
  • autobot-backend/tests/test_execution_hardening_pin_17267.py
  • autobot-backend/tests/unit/test_data_retention.py
  • autobot-frontend/index.html
  • autobot-frontend/src/App.vue
  • autobot-frontend/src/__tests__/nav-items-coverage.test.ts
  • autobot-frontend/src/assets/css/__tests__/uiMode.css.test.ts
  • autobot-frontend/src/assets/css/components.css
  • autobot-frontend/src/components/__tests__/CommandPalette.nav.test.ts
  • autobot-frontend/src/components/auth/LoginForm.vue
  • autobot-frontend/src/components/layout/AppHeader.stories.ts
  • autobot-frontend/src/components/layout/AppHeader.vue
  • autobot-frontend/src/components/layout/MobileNavPanel.stories.ts
  • autobot-frontend/src/components/layout/MobileNavPanel.vue
  • autobot-frontend/src/components/layout/NavIconCluster.stories.ts
  • autobot-frontend/src/components/layout/NavIconCluster.vue
  • autobot-frontend/src/components/layout/NavIconLink.stories.ts
  • autobot-frontend/src/components/layout/NavIconLink.vue
  • autobot-frontend/src/components/layout/NavItemIcon.stories.ts
  • autobot-frontend/src/components/layout/NavItemIcon.vue
  • autobot-frontend/src/components/layout/ProfileMenu.stories.ts
  • autobot-frontend/src/components/layout/ProfileMenu.vue
  • autobot-frontend/src/components/layout/SystemStatusModal.stories.ts
  • autobot-frontend/src/components/layout/SystemStatusModal.vue
  • autobot-frontend/src/components/layout/TopNavLinks.stories.ts
  • autobot-frontend/src/components/layout/TopNavLinks.vue
  • autobot-frontend/src/components/layout/UiModeToggle.stories.ts
  • autobot-frontend/src/components/layout/UiModeToggle.vue
  • autobot-frontend/src/components/layout/__tests__/AppHeader.test.ts
  • autobot-frontend/src/components/layout/__tests__/NavIconLink.test.ts
  • autobot-frontend/src/components/layout/__tests__/ProfileMenu.test.ts
  • autobot-frontend/src/components/layout/__tests__/SystemStatusModal.test.ts
  • autobot-frontend/src/components/layout/__tests__/UiModeToggle.test.ts
  • autobot-frontend/src/components/profile/ProfileModal.vue
  • autobot-frontend/src/components/settings/AdditionalThemesGroup.stories.ts
  • autobot-frontend/src/components/settings/AdditionalThemesGroup.test.ts
  • autobot-frontend/src/components/settings/AdditionalThemesGroup.vue
  • autobot-frontend/src/components/settings/LanguageSettingsPanel.vue
  • autobot-frontend/src/components/settings/ThemePresetPicker.vue
  • autobot-frontend/src/components/settings/UiModeSettingsCard.stories.ts
  • autobot-frontend/src/components/settings/UiModeSettingsCard.test.ts
  • autobot-frontend/src/components/settings/UiModeSettingsCard.vue
  • autobot-frontend/src/components/theme/EmberThemeToggle.vue
  • autobot-frontend/src/composables/__tests__/usePreferences.account.test.ts
  • autobot-frontend/src/composables/__tests__/useTheme.metaThemeColor.test.ts
  • autobot-frontend/src/composables/__tests__/useUiMode.test.ts
  • autobot-frontend/src/composables/systemStatusContext.ts
  • autobot-frontend/src/composables/usePreferences.ts
  • autobot-frontend/src/composables/useTheme.ts
  • autobot-frontend/src/composables/useThemeVariant.ts
  • autobot-frontend/src/composables/useUiMode.ts
  • autobot-frontend/src/config/navItems.ts
  • autobot-frontend/src/config/routes.ts
  • autobot-frontend/src/i18n/locales/ar.json
  • autobot-frontend/src/i18n/locales/de.json
  • autobot-frontend/src/i18n/locales/en.json
  • autobot-frontend/src/i18n/locales/es.json
  • autobot-frontend/src/i18n/locales/fa.json
  • autobot-frontend/src/i18n/locales/fr.json
  • autobot-frontend/src/i18n/locales/he.json
  • autobot-frontend/src/i18n/locales/lv.json
  • autobot-frontend/src/i18n/locales/pl.json
  • autobot-frontend/src/i18n/locales/pt.json
  • autobot-frontend/src/i18n/locales/ur.json
  • autobot-frontend/src/stores/__tests__/useUserStore.signIn.test.ts
  • autobot-frontend/src/stores/useUserStore.ts
  • autobot-frontend/src/theme-variant-init.ts
  • autobot-frontend/src/views/SettingsView.vue
  • autobot-frontend/vite.config.js
  • autobot-infrastructure/autobot-backend/scripts/migrations/migrate_secrets_ownership.py
  • autobot-infrastructure/shared/scripts/ai-ml/model_reference_validator.py
  • autobot-infrastructure/shared/scripts/automated_testing_procedure.py
  • autobot-infrastructure/shared/scripts/comprehensive_log_aggregator.py
  • autobot-infrastructure/shared/scripts/demo/demo_codebase_indexing.py
  • autobot-infrastructure/shared/scripts/diagnose_backend.py
  • autobot-infrastructure/shared/scripts/fresh_kb_setup.py
  • autobot-infrastructure/shared/scripts/migrations/migrate_category_indexes.py
  • autobot-infrastructure/shared/scripts/migrations/migrate_config_users.py
  • autobot-infrastructure/shared/scripts/migrations/migrate_sessions_608.py
  • autobot-infrastructure/shared/scripts/monitoring/start_monitoring_category_default_test.py
  • autobot-infrastructure/shared/scripts/monitoring_system.py
  • autobot-infrastructure/shared/scripts/populate_kb_chromadb.py
  • autobot-infrastructure/shared/scripts/profile_api_endpoints.py
  • autobot-infrastructure/shared/scripts/profile_backend.py
  • autobot-infrastructure/shared/scripts/profile_startup.py
  • autobot-infrastructure/shared/scripts/security/backfill_session_ownership.py
  • autobot-infrastructure/shared/scripts/security/mtls-migrate.py
  • autobot-infrastructure/shared/scripts/seq_log_forwarder.py
  • autobot-infrastructure/shared/scripts/setup/knowledge/fresh_kb_setup.py
  • autobot-infrastructure/shared/scripts/startup_coordinator.py
  • autobot-infrastructure/shared/scripts/startup_timing_analysis.py
  • autobot-infrastructure/shared/scripts/test_configuration.py
  • autobot-infrastructure/shared/scripts/test_llm_awareness.py
  • autobot-infrastructure/shared/scripts/test_phase2_migration.py
  • autobot-infrastructure/shared/scripts/trace_backend.py
  • autobot-infrastructure/shared/scripts/utilities/demo_workflow_system.py
  • autobot-infrastructure/shared/scripts/utilities/diagnose_backend_timeout.py
  • autobot-infrastructure/shared/scripts/utilities/init_memory_graph_redis.py
  • autobot-infrastructure/shared/scripts/utilities/manage_classification.py
  • autobot-infrastructure/shared/scripts/utilities/manage_system_knowledge_category_default_test.py
  • autobot-infrastructure/shared/scripts/utilities/migrate_codebase_to_chromadb.py
  • autobot-infrastructure/shared/scripts/utilities/migrate_encryption.py
  • autobot-infrastructure/shared/scripts/utilities/optimize_gpu_usage.py
  • autobot-infrastructure/shared/scripts/utilities/settings_diagnostic_utility.py
  • autobot-infrastructure/shared/scripts/utilities/test_autobot_functionality.py
  • autobot-infrastructure/shared/scripts/utilities/validate-security-config.py
  • autobot-infrastructure/shared/scripts/utilities/validate_chat_knowledge.py
  • autobot-infrastructure/shared/scripts/validate_configuration.py
  • autobot-infrastructure/shared/scripts/validate_timeout_config.py
  • autobot-infrastructure/shared/tools/index_documentation_category_default_test.py
  • autobot-slm-backend/migrations/add_audit_logs_canonical_columns.py
  • autobot-slm-backend/migrations/add_audit_logs_canonical_columns_test.py
  • autobot-slm-backend/migrations/runner.py
  • autobot-slm-backend/migrations/runner_exit_code_test.py
  • autobot-slm-backend/tests/test_rbac_middleware_cache.py
  • autobot-slm-backend/tests/test_rbac_permission_denied_audit.py
  • autobot-slm-frontend/src/assets/styles/slm-scheme.css
  • autobot-slm-frontend/src/components/common/Sidebar.vue
  • autobot-slm-frontend/src/composables/useAccessibility.ts
  • autobot-slm-frontend/src/locales/ar.json
  • autobot-slm-frontend/src/locales/de.json
  • autobot-slm-frontend/src/locales/es.json
  • autobot-slm-frontend/src/locales/fa.json
  • autobot-slm-frontend/src/locales/fr.json
  • autobot-slm-frontend/src/locales/he.json
  • autobot-slm-frontend/src/locales/lv.json
  • autobot-slm-frontend/src/locales/pl.json
  • autobot-slm-frontend/src/locales/pt.json
  • autobot-slm-frontend/src/locales/ur.json
  • autobot-slm-frontend/src/views/LoginView.vue
  • autobot-slm-frontend/vite.config.ts
  • autobot-slm-frontend/vitest.config.ts
  • autobot_shared/container_hardening.py
  • autobot_shared/env_registry_security.py
  • autobot_shared/knowledge_categories.py
  • autobot_shared/store_authority.py
  • autobot_shared/user_management/audit_rows.py
  • autobot_shared/user_management/audit_rows_test.py
  • autobot_shared/user_management/middleware/rbac_middleware.py
  • autobot_shared/user_management/models/audit.py
  • autobot_shared/user_management/models/audit_schema_17225_test.py
  • autobot_shared/user_management/organization_service.py
  • autobot_shared/user_management/team_service.py
  • autobot_shared/user_management/user_service_base.py
  • docs/architecture/CONTROL_PLANE_MAP.md
  • docs/developer/AUDIT_SYSTEMS.md
  • docs/developer/ENV_VARS.md
  • libs/autobot-ui/README.md
  • libs/autobot-ui/index.ts
  • libs/autobot-ui/src/components/BaseTooltip.vue
  • libs/autobot-ui/src/components/BrandMark.vue
  • libs/autobot-ui/src/components/__tests__/BaseTooltip.test.ts
  • libs/autobot-ui/src/components/__tests__/BrandMark.test.ts
  • libs/autobot-ui/src/composables/__tests__/useAnnounce.test.ts
  • libs/autobot-ui/src/composables/useAnnounce.ts
  • libs/autobot-ui/src/tokens/adapter.css
  • libs/autobot-ui/src/tokens/contract.css
  • libs/autobot-ui/vite-resolve.ts
  • repo_tests/_hardcoded_colour_baseline.py
  • repo_tests/_hardcoded_colour_detect.py
  • repo_tests/_raw_palette_baseline.py
  • repo_tests/_reach_policy.py
  • repo_tests/audio_extension_allowlist_test.py
  • repo_tests/audit_writer_single_source_17225_test.py
  • repo_tests/container_hardening_single_source_17267_test.py
  • repo_tests/docstring_restatement_baseline_17165.py
  • repo_tests/env_var_bare_cast_allowlist.py
  • repo_tests/frontend_file_size_ratchet_baseline.py
  • repo_tests/frontend_file_size_ratchet_test.py
  • repo_tests/frontend_fragmentation_ratchet_test.py
  • repo_tests/infra_analysis_backend_names_resolve_18289_test.py
  • repo_tests/infra_backend_imports_allowlist_18288.py
  • repo_tests/infra_scripts_no_backend_imports_18288_test.py
  • repo_tests/infra_validators_repaired_18289_test.py
  • repo_tests/no_tracked_key_material_test.py
  • repo_tests/one_brand_mark_and_announcer_18240_test.py
  • repo_tests/prepush_frontend_projects_17574_test.py
  • repo_tests/reach_scope_claim_17844_test.py
  • repo_tests/redaction_concept_census_test.py
  • repo_tests/single_attribute_writer_18240_test.py
  • repo_tests/stranded_recorder_entries_test.py
  • repo_tests/symbol_fork_baseline.json
  • repo_tests/sys_modules_module_scope_restoration_test.py
  • repo_tests/undefined_css_var_ratchet_17552_test.py
  • scripts/frontend_file_size_known_large.py
  • tools/git-hooks/pre-push

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

Notice: 29 open PRs — past the runaway threshold (25)

This is not a request to defer this PR. The actual limit is the open-PR cap (AUTOBOT_OPEN_PR_CAP, default 40), enforced at pre-push against NEW branches only -- pushing more commits to this PR's own branch is never blocked by it.

This notice only means the count is high enough to be worth a glance for a runaway — something opening PRs in a loop, or a merge pipeline that has stalled so nothing is draining.

Currently open:

If the queue is draining normally, ignore this. Otherwise:

  1. Check whether CI is dispatching at all — see the ci-dispatch-watchdog status on these PRs
  2. Merge the ones whose CI has finished and review has passed: gh pr merge <number> --squash --delete-branch
  3. Look for a loop opening near-identical PRs

Warn-only runaway detector — .github/workflows/pr-queue-gate.yml. It never blocks a merge.

for name, create in _INDEX_SQL:
cursor.execute(_INVALID_INDEX_SQL, (name,))
if cursor.fetchone():
cursor.execute(f"DROP INDEX CONCURRENTLY IF EXISTS {name}") # nosec B608 -- name is a module constant
@mrveiss

mrveiss commented Oct 12, 2026

Copy link
Copy Markdown
Owner Author

Closed and rebuilt as train #7b. #18373 is ejected: it breaks every frontend build through the @autobot/ui subpath alias, and it fails Stylelint and the generated types (details on #18373). The remaining constituents ride train #7b with the in-train fixes: the #18232 test path, #18343's stale SSOT row, and the audio floor.

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.

2 participants