Skip to content

Promote dev to main after NeuralLiquid transfer - #529

Closed
JustAGhosT wants to merge 152 commits into
mainfrom
dev
Closed

Promote dev to main after NeuralLiquid transfer#529
JustAGhosT wants to merge 152 commits into
mainfrom
dev

Conversation

@JustAGhosT

Copy link
Copy Markdown
Collaborator

Summary

  • Promote the current post-transfer dev baseline to main.
  • Includes Batch 2/Batch 3 migration closeout and post-transfer hardening already merged on dev.

Verification

  • Existing dev CI passed on merged PRs leading to ad2c84d.
  • This PR is intended to run the repository promotion checks on main.

JustAGhosT and others added 30 commits March 10, 2026 22:35
…eletons

FE-005: 5 Zustand stores
- useAuthStore: mirrors AuthContext for non-React consumers
- useAgentStore: agent registry with real agenticApi integration
- useDashboardStore: dashboard data (fetch-based, pending backend endpoints)
- useNotificationStore: in-app notifications with unread tracking
- usePreferencesStore: persisted user preferences (theme, accessibility)

FE-022: Navigation components
- Sidebar with collapsible sections, active route highlighting
- TopBar with breadcrumbs, notification bell, connection indicator
- MobileMenu responsive drawer (<768px)

FE-021: Multi-page routing
- (app) route group with shared layout (sidebar + topbar + ProtectedRoute)
- 6 routes: /dashboard, /agents, /analytics, /compliance, /marketplace, /settings
- Per-route loading.tsx and error.tsx boundaries
- Dashboard page wired to useDashboardStore
- Agents page wired to useAgentStore with table view
- Settings page wired to usePreferencesStore with toggle controls

FE-003: SignalR real-time client
- useSignalR hook with auto-reconnect (exponential backoff)
- subscribe/unsubscribe/invoke/joinGroup/leaveGroup methods
- ConnectionIndicator component shows live status

FE-007: Skeleton loading components
- Skeleton, SkeletonCard, SkeletonTable, SkeletonMetric, SkeletonDashboard

Dependencies: zustand@5.0.11, @microsoft/signalr@10.0.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Root `/` now redirects to `/dashboard` (server-side via next/navigation)
- Deleted `services/api.ts` (DashboardAPI singleton with hardcoded mock data)
- Deleted `hooks/useDashboardData.ts` (hook wrapper around mock)
- Dashboard page uses `useDashboardStore` fetching from real backend
- Updated AGENT_BACKLOG.md: Phase 14 marked complete, Phase 14b added
  (CognitiveMeshUI component library integration)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…tness

Backend:
- CORS empty-origins guard in Program.cs
- Replace ThrowIfNullOrWhiteSpace with BadRequest in AdaptiveBalanceController
- Add ProducesResponseType attributes, CancellationToken forwarding, error handling
  in AgentController and CustomerServiceController
- Simplify AgentRegistryService circuit breaker delegation
- Fix AuthorityService RevokeAuthorityOverrideAsync return and null-forgiving

Frontend:
- Prevent open redirect in login returnTo validation
- Move ApiBootstrap inside ErrorBoundary in layout
- Dev-only error messages in ErrorBoundary and error page
- Guard e.message in ExtensionErrorSuppressor
- Keyboard a11y on agent table rows, settings focus styles, label htmlFor
- MobileMenu active state fix, Escape key, backdrop aria-hidden
- navItems fallback group in groupBySections
- Add pathname to ProtectedRoute useEffect deps
- Toast aria-live on container
- Fix agent store name mapping and dashboard store error handling
- Auth context: logout in proactive-refresh deps, Secure cookie flag

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Brings in ESLint migration (next lint → eslint .), CodeQL
LogSanitizer fix, CI type-check continue-on-error, and all
Phase 13 fixes. Resolves CustomerServiceController conflict
by keeping try/catch + Sanitize().

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sync with latest dev to resolve PR merge conflicts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- AGENT_BACKLOG.md: fix item count (29→27), fix circular gate deferral
- AgentController: propagate CancellationToken to all registry port calls
- IAgentRegistryPort: add CancellationToken to Register/GetById/Deactivate
- AgentRegistryService: sanitize framework in compliance status log
- CustomerIntelligenceManager: sanitize customerId in exception message,
  escape single quotes in Cypher query to prevent injection
- NISTComplianceService: sanitize audit entry Details fields, lock
  EvidenceRecord mutation for thread safety, capture TotalCount inside
  lock for consistent snapshot
- AdaptiveBalanceService: snapshot ConcurrentBag for confidence calc,
  lock DimensionState reads/writes for atomic updates
- Agents page: remove role="grid" (no 2D nav), add focus-visible ring
- Remove coverage/ artifacts from git, add to .gitignore

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phase 14: Core UX — stores, navigation, routing, real API
Merge pull request #348 from phoenixvc/feat/frontend-phase-13
chore(deps): pin dependency node to 22.22.1
The peaceiris/actions-gh-pages action needs push access to the gh-pages
branch. Added job-level permissions and removed unused ACTIONS_DEPLOY_KEY env.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…s, Tailwind v4

Merge CognitiveMeshUI repo (169 files): 48 shadcn/ui components with Radix UI
deps, design tokens via Style Dictionary v5, Storybook v10 config.

Key changes:
- Install 27 @radix-ui/* packages + cmdk, recharts@3, sonner, vaul, etc.
- Move components/ui/ → src/components/ui/ with TS validation enabled
- Move hooks (use-mobile, use-toast) and theme-provider into src/
- Add lib/utils.ts (shadcn cn() helper)
- Migrate Tailwind v3 → v4 (@tailwindcss/postcss + @config directive)
- Fix all 150+ TypeScript errors across components, visualizations, lib modules
- Harden Next.js 16 SSR (Suspense boundaries, window guards, env fallbacks)
- Remove dead code: BridgeHeader, FXModePanel, LayoutToolsPanel, VoiceFeedback
- Delete duplicate /settings route (kept (app)/settings)
- Update MIGRATION.md (100% complete) and AGENT_BACKLOG.md (Phase 14b ✓)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phase 14b: UI component library integration
chore(deps): update entity framework core to v10.0.4
fix(deps): pin dependencies
chore(deps): update microsoft.extensions to v10.0.4
fix(deps): update all non-major dependencies
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Phase 15 Batch A: Settings, Notification Preferences, User Profile

FE-008: Enhanced settings page with language selector (en-US/fr-FR/de-DE),
Data & Privacy consent toggles (analytics, telemetry, personalized content,
third-party sharing), descriptions on all toggles, save confirmation.

FE-009: New /settings/notifications page with channel toggles (email, push,
SMS, in-app), 5 notification categories with per-category enable/disable,
quiet hours with start/end time and timezone.

FE-010: New /profile page with account info, role badges (Admin/Analyst/
Viewer), GDPR & EU AI Act consent management (4 consent types), privacy
summary with status dots, data export request (GDPR Article 20), session
info. Added Profile nav item with User icon to sidebar.

Store: Extended usePreferencesStore with language, privacyConsent, and
notificationPreferences state + actions (setLanguage, setPrivacyConsent,
setNotificationChannel, setQuietHours).

Build: 14 pages generated (was 12), 0 TypeScript errors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Address PR review findings: Link, i18n, GDPR persistence, shared toggle

- Replace <a> with Next.js <Link> in settings, notifications, profile pages
- Call i18n.changeLanguage() on language select for immediate effect
- Move GDPR consent from local useState to Zustand store (persisted)
- Add GdprConsentRecord type + setGdprConsent action to preferences store
- Fix "Authenticated since" to use useMemo (stable across re-renders)
- Extract shared ToggleRow/ToggleButton to components/ui/toggle-switch.tsx
- Replace freeform timezone input with curated timezone <select>
- Add accessible label (htmlFor) to timezone select
- Fix store doc comment: local-only with TODO for backend sync
- Use canonical Tailwind class bg-white/2

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix ~40 code quality issues across backend and frontend

Backend: CancellationToken propagation, atomic ConcurrentDictionary updates,
Cypher injection prevention via regex validation, authority override revocation.

UI components: forwardRef type corrections, aria-hidden/aria-label a11y fixes,
event listener cleanup, CSS sanitization for dangerouslySetInnerHTML, unique
keys with index fallback, variant priority fix, displayName casing.

Pages/hooks/stores: open redirect prevention, SSR hydration fix, timer cleanup,
SignalR mounted guard, auth token expiry check, Array.isArray guard, crypto
randomUUID replacing module counter, Zustand persist with versioned migration,
devDependencies cleanup, dark-themed select options.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Phase 15b: 5 widget PRDs, frontend Docker, K8s, Terraform

Widgets (FE-011 to FE-015):
- NIST Compliance: maturity gauge, gap analysis table, compliance timeline
- Adaptive Balance: spectrum sliders, balance history chart
- Value Generation: radar chart, organizational blindness heatmap
- Impact Metrics: safety gauge, impact radar, resistance timeline
- Cognitive Sandwich: phase stepper, burndown chart

CI/CD (FECICD-002 to FECICD-004):
- Frontend Dockerfile (multi-stage, standalone, non-root)
- Docker Compose with frontend + API services
- Frontend deploy pipeline (ACR → AKS staging → prod)
- Dependabot npm coverage for frontend deps
- CodeQL TypeScript analysis

Infrastructure (FECICD-005, FECICD-006):
- K8s frontend manifests (deployment, service, configmap, ingress)
- K8s overlays (dev: 1 replica, staging: 2, prod: 3 + TLS)
- Terraform frontend-hosting module (Azure App Service, Node.js 22)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Orchestrator: Phase 15 complete — 95/109 items done

Frontend grade C→B. 5 widget PRDs built (NIST, Adaptive Balance,
Value Gen, Impact Metrics, Cognitive Sandwich). Frontend Docker,
K8s manifests, Terraform module, deploy pipeline, Dependabot npm,
CodeQL TypeScript all added. 14 items remaining for Phases 16-17.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
JustAGhosT and others added 23 commits July 12, 2026 22:19
* docs: refresh cognitive mesh migration package

* docs: address migration package review

* docs: align sluice routing handoff
* infra: add cognitive mesh routing settings

* infra: require managed sluice key reference
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* fix(deploy): wire Docket usage auth settings

* fix(deploy): preserve optional Sluice and Docket settings

* chore: retrigger validation

* fix(deploy): pass optional settings through env
* fix(deploy): support Docket API key bridge

* fix(deploy): clear stale Docket bridge key
* docs(agent-ops): add workflow contract schemas

* docs(agent-ops): address contract review feedback

* docs(agent-ops): tighten gate id validation
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* fix(deploy): persist Sluice gateway secret bridge

* docs: refresh Sluice Key Vault closeout

* docs: assign remaining migration gates
…tart

docs: close Batch 2 NeuralLiquid migration prep
Merged post-transfer hardening: restored collaborator admin access, reconciled prod Terraform/App Service drift, imported NeuralLiquid DNS records into Terraform state, removed Terragrunt root warning, and documented Docket attribution smoke evidence.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ad2c84d3c9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/ApiHost/Program.cs
telemetry.GetRecent(limit.GetValueOrDefault(25))));
});
app.MapGet("/api/v1/docket/usage/recent", (IDocketUsageRecorder docket) => Results.Ok(docket.GetRecent(25)));
app.MapPost("/api/v1/docket/usage", (DocketUsageEvent usageEvent, IDocketUsageRecorder docket) =>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Require auth before forwarding usage telemetry

In the public ApiHost, this new POST endpoint accepts any request and then forwards the payload to Docket using the service's configured API key/bearer token. In production contexts where the API host is internet-reachable, an unauthenticated caller can inject arbitrary model-usage events and corrupt cost/funding telemetry; add authentication/authorization or restrict this route to a trusted internal caller before forwarding.

Useful? React with 👍 / 👎.

Comment thread src/ApiHost/Program.cs
builder.Services.AddImpactMetricsServices();
builder.Services.AddCognitiveMeshRealTime();
builder.Services.AddSingleton<ModelRoutingTelemetryStore>();
builder.Services.AddHttpClient<IDocketUsageRecorder, DocketUsageRecorder>();

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve Docket usage events across requests

AddHttpClient<TClient,TImplementation>() registers the typed client as transient, so every /api/v1/docket/usage POST and /api/v1/docket/usage/recent GET gets a fresh DocketUsageRecorder with its own queue. In the normal API request flow, a recorded event is lost as soon as that request ends, and the recent/summary endpoints only see their newly constructed seed event; make the recorder state singleton/shared while still using an HttpClient from the factory for forwarding.

Useful? React with 👍 / 👎.

Comment on lines +169 to +172
var result = await container.UpsertItemAsync(
policy,
new PartitionKey(policy.IncidentCategory),
cancellationToken: ct).ConfigureAwait(false);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Store policy versions under distinct Cosmos documents

When an existing policy is revised with the same id and partition key, this UpsertItemAsync(policy, ...) writes the new version back to the exact same Cosmos document that was just marked inactive, so the inactive prior version is overwritten. As a result GetPolicyHistoryAsync cannot return the full version history promised by the port, and delete/history operations only see the latest document; persist each version with a distinct document id or separate version key while keeping a stable policy id for lookups.

Useful? React with 👍 / 👎.

@JustAGhosT

Copy link
Copy Markdown
Collaborator Author

Closing this direct dev-to-main promotion PR because GitHub reports merge conflicts. Replaced by an integration branch that merges dev into main and resolves conflicts while preserving the System.Text.Json migration path.

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