Commit Graph

1192 Commits

Author SHA1 Message Date
master
b3198a66c7 refactor(compose): split monolith into stella-infra + stella-services
- Extract infrastructure (postgres, valkey, rustfs, zot, rekor) to docker-compose.stella-infra.yml
- Move application services to docker-compose.stella-services.yml
- Convert scalar YAML anchors to .env variables for cross-file compatibility
- Duplicate structural anchors locally in services file
- Remove cross-file depends_on (services already have connection retry)
- Legacy monolith retained for backwards compatibility

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 13:11:47 +03:00
master
53f294400f fix(infra): resolve fresh-build DB schema gaps, Kerberos warnings, and Dockerfile syntax
- Workflow: add PostgreSQL auto-migration (8 tables in schema `workflow`)
  with AddStartupMigrations wiring and embedded SQL migration
- Scheduler: add missing `schema_version` and `source` columns to
  `scheduler.schedules` table in both init script and migration
- Platform: delay analytics maintenance 15s to avoid race with migration
  020_AnalyticsRollups creating compute_daily_rollups()
- Docker: install libgssapi-krb5-2 in runtime image to eliminate Npgsql
  Kerberos probe warnings across all 59 services
- Docker: remove `# syntax=docker/dockerfile:1.7` directive from both
  Dockerfiles to avoid BuildKit frontend pull failures on flaky DNS
- Postgres init: add `workflow` schema to 01-create-schemas.sql

Verified: 75 containers, 0 unhealthy, 0 recurring errors after full
wipe-and-rebuild cycle.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 11:40:08 +03:00
master
afbedf1c60 feat(scripts): scheduler scripts endpoint + script-picker component
Add ScriptsEndpoints to the Scheduler WebService for CRUD operations on
automation scripts. Add a reusable script-picker overlay component for
selecting scripts from the UI.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 15:34:08 +03:00
master
1ac518282b fix(ui): deadletter filter bar refactor, scripts search input, glossary tooltip
Replace deadletter grid filters with a compact inline filter bar using
StellaFilterMulti chips. Add missing CSS for scripts search input.
Fix glossary tooltip positioning.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 15:34:02 +03:00
master
c778e74e22 style: update brand color fallbacks from #2563eb to #F5A623
Align hardcoded --color-brand-primary fallbacks to the amber brand color
across chat messages, advisory sources, symbol sources, entity cards,
replay controls, and topology commands.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 15:33:56 +03:00
master
b07914936c feat(stella-helper): long-press close UX + minimum thinking animation
Close button now uses quick-click to dismiss and long-press to reveal
mute options. Chat stream emits 'start' immediately so the mascot
thinking animation plays during the HTTP wait with an 800ms minimum
duration. User preferences page gains a tutorial reset button.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 15:33:47 +03:00
master
1e84d98413 feat(page-help): genie animation + breadcrumb badge + dismiss menu
Page help panel now animates in/out with a genie effect. A persistent
help badge in the breadcrumb lets users reopen the panel after closing.
Long-press on close reveals per-page and global dismiss options.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 15:33:40 +03:00
master
8beed2afb4 feat(audit): consolidate audit views, merge governance audit into unified log
Remove standalone GovernanceAuditComponent and AuditPolicyComponent in
favor of the unified audit log with policy-specific category chips,
structured governance diffs, and per-event policy detail fields. Evidence
and policy-decisioning routes now redirect to the consolidated audit page
under Operations.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 15:33:32 +03:00
master
3a95f315bd feat(airgap): multi-source import (server path, URL, file upload) with overlay UX
Import now supports three sources: server-side path (USB/NFS volumes),
backend URL download, and browser file upload. Export/import workflows
refactored from routed pages to overlay dialogs. Docs updated with
volume mount instructions and source comparison table.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 15:33:21 +03:00
master
6e72ad844e feat(concelier): accept environment name or GUID in readiness endpoint
The /environments/{id}/readiness endpoint now resolves environment names
(e.g. "dev", "prod-us-east") via IEnvironmentService, returning an empty
list for unregistered environments instead of a 404.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 15:33:11 +03:00
master
4bbbc52380 fix(auth): persist session to localStorage for cross-tab support
Session metadata and full session now written to both sessionStorage and
localStorage so that new tabs and window.open() inherit the auth state
without requiring a fresh login.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 15:33:04 +03:00
master
e0c537c427 feat(release-editor): pipeline-to-workflow generator + promote integration
Pipeline → Workflow Generator (pipeline-to-workflow.service.ts):
- Converts ReleasePipeline model to stellaops.workflow.definition/v1 canonical JSON
- Maps each phase type to workflow steps:
  - preflight → call-transport (scanner verify-digests)
  - gate → call-transport (policy-engine evaluate-release-gates) + decision
  - approval → activate-task with roles + timeout
  - deploy → strategy-specific steps:
    - rolling: call-transport with batch config
    - canary: loop of (call-transport + timer + decision) per stage
    - blue-green: deploy-green → warmup timer → switch-traffic → keepalive → teardown
    - A/B: fork (deploy-variant-A, deploy-variant-B) → timer → evaluate-winner
  - test → call-transport (taskrunner) + decision on pass/fail
  - seal → call-transport (attestor + signer)
- Fallback branches: whenFailure on deploy/test steps → rollback transport
- Expression helpers: str(), num(), bool(), path(), obj(), binary(), setState()

Promote Integration (ReleaseEndpoints.cs):
- ExtractWorkflowName() parses embedded workflow definition from release description
- RequestPromotion now uses the release's custom workflow name if present
- Falls back to generic "release-promotion" workflow for releases without custom pipelines
- Workflow definition JSON embedded in description metadata during seal

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 12:19:03 +03:00
master
524f085aca feat(release-editor): visual pipeline editor with smart defaults and strategy visualization
Backend:
- Add GET /releases/latest-by-name endpoint for smart defaults (clone from previous release)
- Add GET /releases/suggest-version endpoint with semver auto-increment
- Add BumpVersion() logic: patch bump, prerelease increment, date-based build bump
- Add ReleaseDefaultsDto with components, strategy, targetEnvironment for pre-fill

Frontend — Pipeline Model (release-pipeline.models.ts):
- ReleasePipeline, PipelinePhase, DeployConfig discriminated union types
- 7 phase types: preflight, gate, approval, deploy, test, promote, seal
- 5 deployment strategies: rolling, canary, blue-green, recreate, A/B release
- 5 test types: smoke, health-check, integration, canary-metrics, manual
- FallbackConfig with behavior (rollback/pause/continue/abort) + autoRollback
- PHASE_CATALOG with icons and default configs for drag palette
- createDefaultPipeline() generates phase sequence based on release type + strategy

Frontend — Pipeline Editor (release-pipeline-editor.component.ts):
- Horizontal phase strip with START/END nodes and arrow connectors
- Color-coded phase nodes (deploy=blue, test=amber, gate=red, approval=purple, seal=green)
- Phase palette dropdown (add preflight/gate/approval/deploy/test/seal phases)
- Click-to-configure: deploy strategy selector, test type, approval count, gate toggles
- Strategy visualizers:
  - Rolling: batch nodes with health check arrows
  - Canary: staged traffic bars (5% → 25% → 50% → 100%) with duration labels
  - Blue-Green: swim lanes with switch indicator
  - A/B: variant bars with metrics + winner
- Fallback branch visualization (dashed red lines below deploy nodes)
- Auto-rollback toggle per phase

Frontend — Create Release Wizard Enhancement:
- Smart defaults: debounced name lookup (500ms) → pre-fill strategy, target, components
- Version suggestion badge ("Use 1.3.1") from previous release version
- Clone banner ("Based on Platform Release 1.2.3")
- Pipeline editor embedded in Contract step (collapsible "Deployment Pipeline" section)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 12:06:58 +03:00
master
c33d8998e2 fix(gateway): add /api/workflow/* route for workflow service
The workflow service registers endpoints under /api/workflow/ (no v1 prefix),
but the gateway config only had /api/v1/workflows/* which routes to the
release-orchestrator. Added a dedicated route for the workflow engine.

Found during E2E testing — workflow definitions and instances were returning
404 through the gateway.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 11:24:17 +03:00
master
9d47cabc37 Orchestrator decomposition: replace JobEngine with release-orchestrator + workflow services
- Remove jobengine and jobengine-worker containers from docker-compose
- Create release-orchestrator service (120 endpoints) with full auth, tenant, and infrastructure DI
- Wire workflow engine to PostgreSQL with definition store (wf_definitions table)
- Deploy 4 canonical workflow definitions on startup (release-promotion, scan-execution, advisory-refresh, compliance-sweep)
- Fix workflow definition JSON to match canonical contract schema (set-state, call-transport, decision)
- Add WorkflowClient to release-orchestrator for starting workflow instances on promotion
- Add WorkflowTriggerClient + endpoint to scheduler for triggering workflows from system schedules
- Update gateway routes from jobengine.stella-ops.local to release-orchestrator.stella-ops.local
- Remove Platform.Database dependency on JobEngine.Infrastructure
- Fix workflow csproj duplicate Content items (EmbeddedResource + SDK default)
- System-managed schedules with source column, SystemScheduleBootstrap, inline edit UI

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 09:57:42 +03:00
master
1b11e4aafc Fix sidebar nav: update hardcoded navSections to match new Security structure
The sidebar component had its own hardcoded navSections array separate from
NAVIGATION_GROUPS config. Updated Security group from 5 items (Vulnerabilities,
Security Posture+4 children, Scan Image, VEX) to 4 flat items (Image Security,
Triage Queue, Risk Overview, Advisory Sources).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 08:27:34 +03:00
master
a330dd3673 Redesign security UX: unified Image Security page, VEX hub overhaul, nav simplification
Security nav restructured from 8 items to 4: Image Security, Triage Queue,
Risk Overview, Advisory Sources. New Image Security page at /security/images
with scope selectors (repo/image/release/environment) and 6 tabs (Summary,
Findings, SBOM, Reachability, VEX, Evidence).

VEX Hub: removed dashboard tab, moved create to button, fixed filters to use
stella-filter-multi, fixed all navigation to absolute paths, fixed 72+ hardcoded
rgba colors, created proper page components for conflicts and create workflow.

Policy shell: added tabs for Packs, Governance, VEX & Exceptions, Simulation,
Audit — all sub-pages now accessible from the Release Policies page.

Integrations: moved symbol sources/marketplace and scanner config to
/setup/integrations.

Backend: mirror config changes now persist via IFeedMirrorConfigStore and
propagate to central Scheduler via SchedulerClient. MirrorExportScheduler
supports IMirrorSchedulerSignal for immediate wakeup on config change.

Mirror detail page: fixed all wrong CSS tokens (text colors used as
backgrounds, inverted borders) to canonical Stella Ops design system.

Exception dashboard: removed duplicate English/Bulgarian title headers.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 01:36:41 +03:00
master
684f69c2ae docs(elksharp): document post-routing visual quality pipeline
Add AGENTS.md sections for the four late-stage post-processing steps
(SpreadOuterCorridors, CollapseOrthogonalBacktracks,
ExtendShortApproachSegments, ReduceLineNodeProximity) and the SVG
bridge gap detection corner radius rationale.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 16:14:58 +03:00
master
16f2f78462 elksharp-svg: fix bridge gap detection for short segments near bends
Reduce the corner radius used in EnumerateEffectiveSegments for bridge
gap detection from 40px to 12px. The 40px pull-back eliminated segments
shorter than 80px from crossing detection, causing 3 of 4 crossings
with edge/22's vertical to show no visual "cut" effect. With 12px
pull-back, crossings on segments as short as 25px are now detected.

Bridge gap count: increased from ~4 to 11 in the document processing
render — all visible crossings now show the cut/bridge effect.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 15:58:20 +03:00
master
df07bcfd24 elksharp: separate overlapping End corridors and widen lead-lane jog
Two fixes for the End approach area:

1. SpreadOuterCorridors now splits shared-Y lanes when edges have
   overlapping X ranges (>40px overlap). edge/20 and edge/23 were both
   at Y=-235 with 2257px of shared horizontal — now split to Y=-235
   and Y=-267 (31.6px gap). Uses the entry's actual corridor Y for
   shift point matching, not the lane's synthetic CurrentY.

2. Widen the lead-lane pre-terminal jog offset from minLineClearance*0.35
   to minLineClearance*0.9. The jog now lands 15px above the End node
   top instead of 6px above the neighboring edge's arrival slot.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 15:46:08 +03:00
master
9d8a2ad181 elksharp: widen End lead-lane pre-terminal jog clearance
Increase the preTerminalY offset in RewriteLeftFaceEndTopCorridorLeadLane
from minLineClearance*0.35 to minLineClearance*0.9. This pushes the
lead-lane jog above the End node boundary (Y=350 vs End top Y=365)
instead of between arrival slots (was Y=383, only 6px above the
neighboring edge/23 at Y=377). The jog is now 27px clear of the
nearest neighbor, eliminating the visual overlap the user reported.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 15:28:46 +03:00
master
053bc70851 elksharp: add post-routing visual quality pipeline
Add four late-stage post-processing steps that run after the iterative
optimizer to improve edge readability without affecting hard routing
correctness:

- SpreadOuterCorridors: enforce min 32px gap between adjacent above-graph
  corridors and push End-bound corridors below all repeat-return corridors
  into their own visual tier (Y=-235 vs Y=-203/-139/-36)
- CollapseOrthogonalBacktracks: detect and remove U-turn loops where edges
  go right then backtrack left then right again (edge/17 fixed from
  7-segment loop to clean 3-segment forward path)
- ExtendShortApproachSegments: extend short final approach segments to
  half the average node width (~101px) so arrowheads have clear directional
  runs into target nodes (11 edges improved, worst case 8px to 71px)
- ReduceLineNodeProximity: push edge segments away from non-terminal nodes
  when within min-clearance (line-node proximity reduced to 2 violations)

Final metrics on document processing render:
- Edge crossings: 24 → 21 (-12.5%)
- Label proximity: 6 → 0 (eliminated)
- Line-node proximity: reduced to 2
- All 7 hard defect classes: zero (maintained)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 14:57:03 +03:00
master
927fd9c9d6 Replace ShiftHighCrossingVerticals with SimplifyEdgePaths in layout pipeline
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 10:26:53 +03:00
master
541a2c3a12 Fix scheduler-orchestrator spec to use SCHEDULER_API mock
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 09:58:53 +03:00
master
071209a2ae Complete TASK-5 source coverage audit and archive all 20 finished sprints
Add docs/modules/concelier/source-coverage.md with 70-source audit (33/70
connectors implemented, P1 fully covered, 9 P2 gaps identified).
Archive all 20 completed sprints from docs/implplan/ to docs-archived/.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 09:58:33 +03:00
master
16c31f3303 Fix test assertion mismatches across Gateway, CLI, JobEngine, AdvisoryAI
- Gateway: align route mapping test with jobengine hostname rename
- CLI: update module registry count (10→28), migration consolidation (36→37),
  fix System.CommandLine option ordering, add SearchUnifiedAsync mock setup,
  strip FluentAssertions license warning from golden output, fix repo root detection
- JobEngine: update service actor subject, tolerate approval expiry in seed data
- AdvisoryAI: update route boost assertions for 0.85 multiplier

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 09:58:25 +03:00
master
50abd2137f Update docs, sprint plans, and compose configuration
Add 12 new sprint files (Integrations, Graph, JobEngine, FE, Router,
AdvisoryAI), archive completed scheduler UI sprint, update module
architecture docs (router, graph, jobengine, web, integrations),
and add Gitea entrypoint script for local dev.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 08:53:50 +03:00
master
8e823792a3 Update Web UI components, test suite, and bundle configuration
Refactor 40+ feature components (evidence, graph, scheduler, topology,
security, releases), stabilize 80+ test specs, add active-surfaces vitest
config, setup-wizard SCSS extraction, and deployment create spec.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 08:53:37 +03:00
master
7be7978580 Add Workflow cancel contracts and projection store improvements
Introduce WorkflowCancelContracts, update IWorkflowRuntimeApi with cancel
support, and refine Postgres/Mongo projection store serialization.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 08:53:22 +03:00
master
7dd22e4b16 Improve AdvisoryAI knowledge search pooling and unified search analytics
Add KnowledgeSearchDataSourceProvider for connection policy adoption,
update PostgresKnowledgeSearchStore and chat audit logger, refine
SearchAnalyticsService and SearchQualityMonitor queries.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 08:53:12 +03:00
master
31fac84cab Add Findings vulnerability detail read model and endpoints
Introduce SecurityVulnerabilityEndpoints, VulnerabilityDetailService,
and supporting contracts for the vulnerability detail page backend.
Includes integration tests for the new endpoints.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 08:52:58 +03:00
master
59eca36429 Add JobEngine deployment compatibility store and scheduler persistence
Introduce PostgresDeploymentCompatibilityStore with migration 011, in-memory
fallback, deployment endpoints, and Postgres fixture for integration tests.
Update Scheduler repository with connection policy adoption.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 08:52:50 +03:00
master
285f761c77 Add Graph saved views persistence and compatibility endpoints
Introduce PostgresGraphSavedViewStore with SQL migration, in-memory fallback,
CompatibilityEndpoints for UI contract alignment, and integration tests
with a shared Postgres fixture.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 08:52:37 +03:00
master
1cff9ef9cc Add integration discovery, GitLab CI/Registry plugins, and CLI catalog command
Introduce IntegrationDiscovery DTOs, GitLabCiConnectorPlugin,
GitLabContainerRegistryConnectorPlugin, CLI integrations command group,
and expand impact/service test coverage for all connector plugins.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 08:52:24 +03:00
master
5d6435fdb2 ElkSharp edge routing: boundary slots, gateway repairs, corridor spacing
Major edge routing improvements including corridor spacing, crossing reduction,
focused gateway boundary repairs, setter families, and advanced restabilization.
Adds workflow renderer tests for document-processing and artifact inspection.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 08:52:02 +03:00
master
e3e87942c7 Add gateway registration resync and slim HELLO transport frames
Introduce GatewayRegistrationResyncService to recover stale registrations,
extract IGatewayTransportClient interface, add EndpointsUpdate and
RegistrationResyncRequest frame types, and expand transport test coverage.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 08:51:48 +03:00
master
4d82c346e3 Tag all Valkey/Redis connections with service-specific ClientName
Set ClientName on every Redis/Valkey connection across Scanner, Signals,
Concelier, Notify, Scheduler, Timeline, and Router for easier connection
attribution in monitoring.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 08:51:27 +03:00
master
ccdfd41e4f Centralize Postgres connection string policy across all modules
Extract connection string building into PostgresConnectionStringPolicy so all
services use consistent pooling, application_name, and timeout settings.
Adopt the new policy in 20+ module DataSource/ServiceCollectionExtensions classes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 08:51:04 +03:00
master
517fa0a92d Suppress verbose web test trace output 2026-04-06 00:55:37 +03:00
master
de5bc63f89 Quiet web test lane warnings and align scheduler spec 2026-04-06 00:51:50 +03:00
master
f8e4bf65fb Stabilize web test lane warning cleanup 2026-04-06 00:51:15 +03:00
master
fc798a1573 Harden remaining runtime transport lifecycles 2026-04-06 00:24:16 +03:00
master
751546084e Harden runtime HTTP transport lifecycles 2026-04-05 23:52:14 +03:00
master
1151c30e3a elksharp: stabilize document-processing terminal routing 2026-04-05 15:02:12 +03:00
master
3a0cfcbc89 up2date 2026-04-03 14:50:59 +03:00
master
2c36b3f5ae remove temp files 2026-04-03 14:50:35 +03:00
master
2141fea4b6 Add integration e2e coverage: GitHubApp, advisory pipeline, Rekor, eBPF hardening
- GitHubApp: 11 new tests (health, CRUD lifecycle, update, delete, UI SCM tab)
- Advisory pipeline: 16 tests (fixture data verification, source management smoke,
  initial/incremental sync, cross-source merge, canonical query API, UI catalog)
  with KEV/GHSA/EPSS fixture data files for deterministic testing
- Rekor transparency: 7 tests (container health, submit/get/verify round-trip,
  log consistency, attestation API) gated behind E2E_REKOR=1
- eBPF agent: 3 edge case tests (unreachable endpoint, coexistence, degraded health)
  plus mock limitation documentation in test header
- Fix UI search race: wait for table rows before counting rowsBefore
- Advisory fixture now serves real data (KEV JSON, GHSA list, EPSS CSV)
- Runtime host fixture adds degraded health endpoint

Suite: 143 passed, 0 failed, 32 skipped in 13.5min (up from 123 tests)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 10:34:04 +03:00
master
a86ef6afb8 fix(elksharp): preserve source/target endpoints in corridor reroute clearance push
When the corridor reroute pushes a horizontal segment away from a
blocking node, preserve the first point (source connection) and
insert a vertical step to reconnect the last point (target connection)
at the original Y. Previously, pushing all points uniformly would
disconnect the edge from its target node when the push Y exceeded
the target node's boundary.

Fixes edge/9 (Retry Decision → Set batchGenerateFailed) which was
pushed to Y=653 but the target node bottom is at Y=614 — the endpoint
now steps back up to Y=592 to reconnect.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 07:47:07 +03:00
master
6771d7fae8 Prime liveAuthPage with integrations navigation after login
Fix for the 2 remaining OIDC redirect failures: after login, the
page lands on Dashboard. When a test calls page.goto('/setup/...'),
Angular sometimes redirects back to Dashboard because the auth guard
hasn't settled.

Fix: After loginAndGetToken, navigate to /setup/integrations and
wait for [role="tab"] to render. This:
1. Settles the OIDC auth guard (validates token, caches auth state)
2. Lazy-loads the integration module chunk
3. Primes Angular's router with the /setup/ route tree

Subsequent page.goto() calls from tests will work reliably because
Angular already has auth state and the lazy chunk is cached.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 07:41:35 +03:00
master
95f9ac379f feat(elksharp): A* node proximity cost, increased layer spacing, bridge gap curve awareness, post-pipeline clearance enforcement
Three-layer edge-node clearance improvement:

1. A* proximity cost with correct coordinates: pass original (uninflated)
   node bounds to ComputeNodeProximityCost so the pathfinder penalizes
   edges near real node boundaries, not the inflated obstacle margin.
   Weight=800, clearance=40px. Grid lines added at clearance distance
   from real nodes.

2. Default LayerSpacing increased from 60 to 80, adaptive multiplier
   floor raised from 0.92 to 1.0, giving wider routing corridors
   between node rows.

3. Post-pipeline EnforceMinimumNodeClearance: final unconditional pass
   pushes horizontal segments within 8px of node tops (12px push) or
   within minClearance of node bottoms (full clearance push).

Also: bridge gap detection now uses curve-aware effective segments
(same preprocessing + corner pull-back as BuildRoundedEdgePath) so
gaps only appear at genuine visual crossings. Collector trunks and
same-group edges excluded from gap detection.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 07:41:19 +03:00