Skip to content

feat(ui): modularize admin scope into independent modules#2678

Closed
gcgoncalves wants to merge 2278 commits intomainfrom
admin-scope-modularised
Closed

feat(ui): modularize admin scope into independent modules#2678
gcgoncalves wants to merge 2278 commits intomainfrom
admin-scope-modularised

Conversation

@gcgoncalves
Copy link
Copy Markdown
Collaborator

🔗 Related Issue

Closes #


📝 Summary

What does this PR do and why?


🏷️ Type of Change

  • Bug fix
  • Feature / Enhancement
  • Documentation
  • Refactor
  • Chore (deps, CI, tooling)
  • Other (describe below)

🧪 Verification

Check Command Status
Lint suite make lint
Unit tests make test
Coverage ≥ 80% make coverage

✅ Checklist

  • Code formatted (make black isort pre-commit)
  • Tests added/updated for changes
  • Documentation updated (if applicable)
  • No secrets or credentials committed

📓 Notes (optional)

Screenshots, design decisions, or additional context.

crivetimihai and others added 30 commits January 31, 2026 13:38
* docs: rationalize README and move detailed content to docs

- Reduce README from 2,502 to 960 lines (-62%)
- Add Quick Links section linking to pinned issues (#2502, #2503, #2504)
- Move environment variables to docs/docs/manage/configuration.md
- Create docs/docs/manage/troubleshooting.md with detailed guides
- Add VS Code Dev Container section to developer-onboarding.md
- Use <details> collapsibles for advanced Docker/Podman/PostgreSQL content
- Streamline Configuration section to essential variables only
- Update version reference from v0.9.0 to 1.0.0-BETA-2
- Verify all 15 ToC anchors and 17 external doc links

Closes #2365

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* chore(docs): bump documentation dependency versions

- mkdocs-git-revision-date-localized-plugin: 1.5.0 → 1.5.1
- mkdocs-include-markdown-plugin: 7.2.0 → 7.2.1
- pathspec: 1.0.3 → 1.0.4

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* fix(docs): add missing blank lines before tables in index.md

MkDocs requires blank lines between bold headers and tables for
proper rendering. Fixed SSO configuration sections.

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* docs: streamline docs landing page and fix broken links

- Replace verbose docs/docs/index.md with streamlined content matching README
- Convert GitHub-flavored <details> to MkDocs ??? admonitions
- Use relative links for internal navigation
- Fix broken #configuration-env-or-env-vars anchors in:
  - docs/docs/development/index.md
  - docs/docs/manage/securing.md
- Reduce docs landing page from 2,603 to 678 lines (-74%)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Add is_active field support through the complete request pipeline:

- Schemas: Added is_active to TokenCreateRequest (bool, default=True)
  and TokenUpdateRequest (Optional[bool], default=None)
- Service: Modified create_token() and update_token() methods to accept
  and use is_active parameter instead of hardcoding
- Router: Updated all 3 token endpoints (create, update, create_team)
  to pass is_active=request.is_active
- Tests: Added explicit coverage for is_active=False on create and
  update, including toggle and reactivation scenarios

Backward compatible: default values maintain existing behavior for
clients not sending the field.

Closes #2573

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
* feat(testing): add Batch 1 & 2 load test user classes for extended API coverage

Add new Locust user classes to improve API endpoint coverage:

Batch 1 - High Priority:
- VersionMetaUser: /version, /health/security
- ExportImportUser: /export, /import/status, /import/cleanup
- A2AFullCRUDUser: A2A agent CRUD operations

Batch 2 - Extended APIs:
- ResourcesExtendedUser: /resources/templates/list, /resources/[id]/info
- ServerExtendedUser: /servers/[id]/prompts

Removed (caused instability):
- GatewayFullCRUDUser: Gateway CRUD triggers slow MCP network calls
- TagsExtendedUser: App bug with json_extract on PostgreSQL (#2607)
- AdvancedProtocolUser: Complex payload validation issues

Disabled (app bug):
- /export/selective: Server object missing is_active attribute (#2606)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* feat(testing): add Batch 3 load test user classes (TokensUser, RBACUser)

Add TokensUser and RBACUser classes for improved API coverage:
- TokensUser: GET /tokens endpoint for token listing
- RBACUser: GET /rbac/roles, /rbac/my/roles, /rbac/my/permissions,
  /rbac/permissions/available endpoints

TeamsUser was removed due to app bug #2608 (current_user_ctx["db"]
returns None causing 500 errors on /teams endpoint).

Closes #2608

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* feat(testing): add Batch 4 load test user classes (AuthUser, OAuthUser)

Add authentication and OAuth user classes for improved API coverage:
- AuthUser: GET /auth/email/events, /auth/email/admin/events,
  /auth/email/admin/users endpoints
- OAuthUser: GET /oauth/registered-clients endpoint

SSO endpoints were not added as they return 404 (not available).
Write operations (login, register) were skipped intentionally.

Total unique endpoints now tested: 99

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* feat(testing): add Batch 5 load test user classes (LogSearchUser, MetricsUser, ObservabilityUser)

Add logging, metrics, and observability user classes for improved API coverage:
- LogSearchUser: GET /api/logs/security-events, /api/logs/audit-trails,
  /api/logs/performance-metrics endpoints
- MetricsUser: GET /metrics, /api/metrics/stats, /api/metrics/config,
  /metrics/prometheus endpoints
- ObservabilityUser: GET /admin/observability/tools/usage,
  /admin/observability/tools/performance,
  /admin/observability/metrics/top-volume endpoints

Total unique endpoints now tested: 108

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* feat(testing): add Batch 6 load test user classes (LLMUser, ReverseProxyUser)

Add LLM and reverse proxy user classes for final API coverage:
- LLMUser: GET /llm/gateway/models, /llmchat/gateway/models,
  /admin/llm/provider-configs, /admin/llm/provider-defaults endpoints
- ReverseProxyUser: GET /reverse-proxy/sessions endpoint

Toolops and well-known endpoints were not added (404 - not available).
Cancellation endpoints skipped (require valid request IDs).

Total unique endpoints now tested: 113
All 6 batches complete.

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
…in (#2587)

- New main entry point: scripts/contextforge-setup.sh
- Modular library structure: scripts/lib/common.sh, debian.sh, rhel.sh
- Removes old scripts/rocky-contextforge-setup-script.sh
- Renames scripts/ubuntu-contextforge-setup-script.sh to lib/common.sh
- Adds --skip-docker-login flag and DOCKER_* env var support
- Adds Docker Compose deployment documentation

Signed-off-by: Jonathan Springer <jps@s390x.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
* test: expand rpc and admin coverage

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* chore: drop ignored todo from repo

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Add onkeydown handlers to HTML elements (div and span) that have onclick
handlers to support keyboard users. This enables Tab navigation to
interactive elements on Overview, MCP Registry and Plugins pages.

The implementation:
- Adds a handleKeydown() utility function in admin.js that triggers
  callbacks on Enter or Space key presses
- Adds role="button", tabindex="0", and onkeydown attributes to
  interactive elements
- Includes event.preventDefault() to stop default browser behavior

Closes #2167

Signed-off-by: Marek Dano <mk.dano@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>
Fixes #2329

Updates tag filtering in TagService.get_entities_by_tag() to use the
cross-database compatible json_contains_tag_expr helper instead of the
raw json_extract LIKE query that only worked with string arrays.

Changes:
- Replace func.json_extract(tags, "$").LIKE query with json_contains_tag_expr
  which supports both legacy string tags and new dict-format tags
- Update PostgreSQL implementation to use table_valued() pattern for
  idiomatic SQLAlchemy handling of jsonb_array_elements (elem.c.value)
- Update unit tests to mock database dialect for json_contains_tag_expr
- Improve test mocking to use patch.object context manager
- Fix docstring to reflect new implementation (was "JSON LIKE queries")
- Add comprehensive tests for dict-format tags [{id, label}]
- Add rigorous PostgreSQL SQL compilation tests with regex validation
- Document design decision: DB filters by 'id' only (TagValidator ensures
  id is always present; label is for display only)

The json_contains_tag_expr helper handles both formats:
- Legacy: ["tag1", "tag2"]
- Dict format: [{"id": "tag1", "label": "Tag 1"}, ...]

PostgreSQL implementation uses table_valued() for explicit column reference:
- func.jsonb_array_elements(...).table_valued("value").alias("elem")
- elem.c.value.op("->>")("id") for proper column access

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>
#2620)

- Add tests for RegistryCache (cache entry expiry, stats, invalidation)
- Add tests for SecurityHeadersMiddleware (HSTS, CORS, CSP, X-Frame-Options)
- Add tests for ValidationMiddleware (path traversal, parameter validation)
- Add tests for auth router (login, get_db, LoginRequest model)
- Expand metrics_maintenance router tests (cleanup, rollup, stats endpoints)
- Add tests for admin error handlers (server add/edit error paths)
- Add tests for main.py gateway error handlers (connection, conflict, validation)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
…rvices (#2585)

* namespace prompt names and resource URIs by gateway ID, ensuring uniqueness

Signed-off-by: Keval Mahajan mahajankeval23@gmail.com

* linting

Signed-off-by: Keval Mahajan <mahajankeval23@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

---------

Signed-off-by: Keval Mahajan mahajankeval23@gmail.com
Signed-off-by: Keval Mahajan <mahajankeval23@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Remove unused import of PromptNotFoundError from test_authorization_access.py.
The import was flagged by ruff linter (F401) as it was never used in the file.

Fixes #2382

Signed-off-by: Jonathan Fulton <jonathan@jonathanfulton.com>
)

Backticks are commonly used in tool descriptions for:
- Inline code examples: `{app="foo"}`
- JSON examples: `{"streams": 5}`
- Parameter references: `labelName`

This is standard Markdown/documentation formatting and poses no security risk.
The remaining forbidden patterns still protect against command injection.

Fixes #2576

Signed-off-by: Jonathan Fulton <jonathan@jonathanfulton.com>
The default asyncio subprocess buffer limit (64KB) is too small for tools
that return large responses (e.g., GitHub PR search results). This causes
LimitOverrunError when the response exceeds the buffer size.

Increase the buffer limit to 16MB to handle large tool responses reliably.

Fixes #2591

Signed-off-by: Jonathan Fulton <jonathan@jonathanfulton.com>
Previously, exceptions in tool invocation were caught and an empty list was
returned, hiding error details from clients. Now errors are re-raised to let
the MCP SDK properly convert them to JSON-RPC error responses.

This ensures clients see actual error messages (e.g., '401 Unauthorized')
instead of empty responses.

Fixes #2570

Signed-off-by: Jonathan Fulton <jonathan@jonathanfulton.com>
…ime (#2618)

datetime.utcnow() is deprecated in Python 3.12 and returns a naive datetime
without timezone info. Replace with datetime.now(timezone.utc) which returns
a timezone-aware datetime.

Fixes #2377

Signed-off-by: Jonathan Fulton <jonathan@jonathanfulton.com>
The json_default function was defined but never called in the code.
It only appeared in docstring examples but was never used.
Removing dead code to reduce maintenance burden.

Fixes #2372

Signed-off-by: Jonathan Fulton <jonathan@jonathanfulton.com>
Fix ADR numbering to use next available number (038) instead of
conflicting 029. Update format to match existing ADR conventions
with proper metadata fields (Date, Deciders, Status).

Added to ADR index.

Signed-off-by: MRSKYWAY <sujyot.kamble1114@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Fixes: #1938

This commit addresses an issue where admin metrics were empty during
benchmark tests shorter than one hour because they relied on hourly
rollup jobs. The metrics query service is updated to use a three-source
aggregation:

1. Historical rollups (for data older than the retention period)
2. Raw metrics for completed hours within the retention period
3. Raw metrics from the current, incomplete hour

This ensures that metrics are always up-to-date, even before the hourly
rollup job runs, providing immediate visibility and preventing expensive
raw table scans during short-lived tests.

Test improvements:
- Fix flaky test at hour boundary (race condition)
- Remove unused patch import
- Add tests for three-source merge behavior

Signed-off-by: Gabriel Costa <gabrielcg@proton.me>
* fix: prevent ReDoS in SSTI validation patterns

Replace regex-based SSTI detection with a linear-time manual parser
to eliminate ReDoS vulnerability while improving bypass resistance.

Changes:
- Add _iter_template_expressions() parser that correctly handles:
  - Quoted strings (single and double quotes)
  - Escaped characters within strings
  - Nested delimiters inside quotes (e.g., "}}" in strings)
  - Continues scanning after unterminated expressions (fail-closed)
- Replace _SSTI_PATTERNS regex list with:
  - _SSTI_DANGEROUS_SUBSTRINGS tuple for keyword detection
  - _SSTI_DANGEROUS_OPERATORS tuple for arithmetic in {{ }} and {% %}
  - _SSTI_SIMPLE_TEMPLATE_PREFIXES for ${, #{, %{ expressions
- Add _has_simple_template_expression() with O(n) linear scan using rfind
- Fix type annotation for validate_parameter_length()
- Block dynamic attribute access bypasses:
  - |attr filter for dynamic attribute access (with whitespace normalization)
  - |selectattr, |sort, |map filters (can take attribute names)
  - getattr function
  - ~ operator for string concatenation (dunder name construction)
  - [ bracket notation for dynamic access
  - % operator for string formatting (e.g., '%c' % 95)
  - attribute= parameter (blocks map/selectattr/sort attribute access)
  - All escape sequences: \x, \u, \N{, \0-\7 (octal)
- Apply operator checks to both {{ }} and {% %} blocks
- Normalize whitespace around | and = before checking

Performance:
- O(n) linear scanning eliminates catastrophic backtracking
- _has_simple_template_expression uses rfind for O(n) instead of O(n²)

Security:
- Proper quote handling blocks bypasses like {{ "}}" ~ self.__class__ }}
- Escaped quote handling blocks {{ "a\"}}b" ~ self }} bypasses
- Blocks dynamic construction bypasses via string concatenation
- Blocks all escape sequence bypasses (hex, unicode, octal)
- Blocks whitespace-based bypasses around | and =
- Blocks % formatting bypasses (e.g., '%c%c' % (95,95))
- Fail-closed: continues scanning after unterminated expressions

Tests:
- Add comprehensive SSTI bypass test cases
- Add pytest.mark.timeout(30) for deterministic ReDoS detection
- Add pathological input tests for ReDoS prevention verification

Closes #2366

Co-authored-by: Shoumi <shoumimukherjee@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* lint

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* fix: enforce true fail-closed on unterminated template expressions

- Raise ValueError immediately on unterminated {{ or {% expressions
- Eliminates O(n²) rescan path, restoring O(n) worst-case performance
- Use consistent error message with other validation failures
- Add regression test for unterminated expression rejection

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* fix: add proper Raises section to docstring for darglint

Move ValueError documentation to proper Raises: section format.

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>
…#2569)

Implement strict per-tool timeout enforcement for all transports
(REST, SSE, StreamableHTTP, A2A) and enhance the CircuitBreakerPlugin
with half-open states, retry headers, and granular configuration.

Changes:
- Wrap all tool invocations in asyncio.wait_for with effective_timeout
- Add per-tool timeout_ms support (ms to seconds conversion)
- Add half-open state for circuit breaker recovery testing
- Add half_open_in_flight flag to prevent concurrent probe requests
- Add retry_after_seconds in violation response for rate limiting
- Add tool_timeout_total and circuit_breaker_open_total Prometheus metrics
- Add cb_timeout_failure context flag for timeout detection in plugins
- Add tool_overrides for per-tool circuit breaker configuration
- Handle both asyncio.TimeoutError and httpx.TimeoutException
- Log actual elapsed time instead of configured timeout

Fixes applied during review:
- Fix _is_error() to detect camelCase isError from model_dump(by_alias=True)
- Fix half-open probe guard: only check when st.half_open is True
- Add stale-probe timeout to prevent permanent wedge if plugin blocks
- Add timeout enforcement to A2A tool invocations
- Call tool_post_invoke on exceptions so circuit breaker tracks failures
- Add ToolTimeoutError subclass to distinguish timeouts from other errors
- Only skip post_invoke for ToolTimeoutError (not all ToolInvocationError)
- Set error_message and span attributes for ToolTimeoutError observability
- Update README to document isError camelCase support

Timeout precedence:
1. Per-tool timeout_ms (if set and non-zero)
2. Global TOOL_TIMEOUT setting (default: 60s)

Closes #2078

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Co-authored-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
…ervers (#2629)

* chore(mcp-servers): update dependencies across Python, Go, and Rust servers

Update all MCP server dependencies to their latest versions:

Python servers (20 servers):
- numpy: 2.4.1 → 2.4.2
- orjson: 3.11.5 → 3.11.6
- openai: 2.15.0 → 2.16.0
- mcp: 1.25.0 → 1.26.0
- sentence-transformers: 5.2.0 → 5.2.2
- anthropic: 0.76.0 → 0.77.0
- boto3/botocore: 1.42.34 → 1.42.39
- And various other minor updates

Go servers (5 servers):
- mcp-go: 0.32.0 → 0.43.2
- spf13/cast: 1.7.1 → 1.10.0
- gopsutil/v3: 3.23.12 → 3.24.5
- golang.org/x/sys: 0.15.0 → 0.40.0

Rust servers (2 servers):
- Updated Cargo.lock with latest compatible versions

Bug fixes:
- mcp_eval_server: Add missing core dependencies (aiohttp, jinja2, psutil)
  that were incorrectly placed in optional dependency groups
- url_to_markdown_server: Fix broken entry point that referenced
  non-existent server.py module

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* chore(mcp-servers): add missing .gitignore files for Go servers

Add .gitignore files for benchmark-server and pandoc-server to ignore
compiled binaries and common build artifacts.

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
* test: expand jmeter coverage and silence prefs warning

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Improve jmeter testing

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* refactor: centralize jmeter rest and mcp mixes

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
* test: enhance Playwright UI testing

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* test: improve Playwright recordings

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* test: harden Playwright UI checks

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* test: expand Playwright UI coverage

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
* docs: refresh documentation formatting and links

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* docs: remove unused snakefood diagram

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* docs: align api auth and readiness examples

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Docs update - diagram review

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
* test(loadtest): expand Locust API coverage from 45% to 70%

Add 11 new user classes to improve REST API load test coverage:

Batch 1 - Core CRUD:
- TeamsCRUDUser: Teams API operations
- TokenCatalogCRUDUser: JWT token management
- RBACCRUDUser: Role/permission CRUD
- CancellationAPIUser: Request cancellation

Batch 3 - Extended Operations:
- RootsExtendedUser: Root CRUD operations
- TagsExtendedUser: Tag-based entity discovery
- LogSearchExtendedUser: Log search and trace
- MetricsMaintenanceUser: Metrics cleanup/rollup
- AuthExtendedUser: Auth login and user info
- EntityToggleUser: Toggle operations for all entities
- EntityUpdateUser: PUT/Update operations

Also adds `make load-test-cli` target for headless testing with
identical configuration to `make load-test-ui`.

Note: LLM-related classes (LLMConfigCRUDUser, LLMChatUser, LLMProxyUser)
and ProtocolExtendedUser were implemented but removed as they require
external LLM provider configuration to function properly.

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* fix(loadtest): resolve test failures in RPC and Roots endpoints

Fix three categories of failures:

1. /rpc tools/call DNS errors (560+ failures):
   - Add VIRTUAL_TOOL_PREFIXES to exclude test-api-tool-* and loadtest-tool-*
   - These virtual tools have no backing MCP server and fail on invocation

2. /roots/changes invalid JSON (157+ failures):
   - Remove this test - endpoint returns SSE stream, not JSON
   - Replace with simple /roots list endpoint

3. /roots/[uri] [delete] 500 errors (97+ failures):
   - Use catch_response to properly handle delete responses
   - Accept 200, 204, 404, 500 as valid responses (server-side issues)

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
* Increase playwright coverage

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* fix(tests): improve playwright tool modal tests reliability

- Use admin_page fixture consistently for authenticated access
- Add explicit waits for modal visibility with :not(.hidden) selector
- Skip tests properly when no tools are available instead of silent pass
- Increase timeout to 10s for modal operations

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* fix(tests): improve playwright test reliability and idempotency

- Add _wait_for_codemirror() to wait for CodeMirror editor initialization
  before interacting with promptArgsEditor
- Remove redundant navigation in test_admin_panel_loads since admin_page
  fixture already handles authentication and navigation
- Add cleanup to all entity create tests (prompts, resources, servers,
  tools) to delete created entities after test completion
- Fix _prepare_tools_table() to use state="attached" instead of requiring
  visibility, preventing timeouts on empty tables
- Apply black/isort formatting fixes

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* fix(tests): improve CodeMirror wait reliability in prompts test

- Wait for CodeMirror library to load before checking editor instance
- Increase timeout from 10s to 30s for slower CI environments
- Add null check to editor wait condition

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
Signed-off-by: mintzo20 <adirmintz@gmail.com>
Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
* test: improve cache coverage

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* test: improve coverage for cli and runtime paths

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* test: fix toolops permission stubs

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* test: expand coverage for tool helpers and admin servers

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* test: extend coverage for low-coverage services

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* test: extend coverage for services

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* test: expand coverage for grpc oauth metrics

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* test: expand unit coverage for admin and services

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* test: expand observability and oauth coverage

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Fix flaky test

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* 80% threshold

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Docs update for testing

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* test: expand coverage for transports, plugins, wrapper

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Fix tests

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Fix tests

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Fix tests

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Test improvements

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Increase coverage

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* test: expand coverage for observability and services

* test: expand bulk registration coverage

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Increase coverage

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Increase coverage

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
* chore: unignore documentation files in .gitignore

* chore: unignore FEATURES.md documentation files

* docs: update oauth design and remove empty blog index

* docs: cleanup placeholders, update statuses, and fix navigation

* typo

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

* Documentation review & update

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>

---------

Signed-off-by: Mihai Criveti <crivetimihai@gmail.com>
gcgoncalves and others added 22 commits February 23, 2026 10:01
Signed-off-by: Gabriel Costa <gabrielcg@proton.me>
Signed-off-by: Gabriel Costa <gabrielcg@proton.me>
Signed-off-by: Gabriel Costa <gabrielcg@proton.me>
Signed-off-by: Gabriel Costa <gabrielcg@proton.me>
Still need to update code from 2 weeks ago

Signed-off-by: Gabriel Costa <gabrielcg@proton.me>
Signed-off-by: Gabriel Costa <gabrielcg@proton.me>
Signed-off-by: Gabriel Costa <gabrielcg@proton.me>
Signed-off-by: Gabriel Costa <gabrielcg@proton.me>
Signed-off-by: Gabriel Costa <gabrielcg@proton.me>
Signed-off-by: Gabriel Costa <gabrielcg@proton.me>
Signed-off-by: Gabriel Costa <gabrielcg@proton.me>
Signed-off-by: Gabriel Costa <gabrielcg@proton.me>
Signed-off-by: Gabriel Costa <gabrielcg@proton.me>
Signed-off-by: Gabriel Costa <gabrielcg@proton.me>
Signed-off-by: Gabriel Costa <gabrielcg@proton.me>
Signed-off-by: Gabriel Costa <gabrielcg@proton.me>
Signed-off-by: Gabriel Costa <gabrielcg@proton.me>
…right tests

Signed-off-by: Marek Dano <mk.dano@gmail.com>
Signed-off-by: Gabriel Costa <gabrielcg@proton.me>
Signed-off-by: Gabriel Costa <gabrielcg@proton.me>
Signed-off-by: Vishu Bhatnagar <vishu.bhatnagar@ibm.com>
Signed-off-by: Gabriel Costa <gabrielcg@proton.me>
@gcgoncalves gcgoncalves force-pushed the admin-scope-modularised branch from a73958b to 1d1429d Compare February 23, 2026 10:19
@crivetimihai crivetimihai changed the title [EPIC] Admin scope modularised feat(ui): modularize admin scope into independent modules Feb 23, 2026
@crivetimihai
Copy link
Copy Markdown
Member

Reopened as #3137. CI/CD will re-run on the new PR. You are still credited as the author.

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

Labels

enhancement New feature or request SHOULD P2: Important but not vital; high-value items that are not crucial for the immediate release

Projects

None yet

Development

Successfully merging this pull request may close these issues.