Skip to content

Add FastAPI backend models and integration tests#7

Closed
DevOpsMadDog wants to merge 1 commit into
mainfrom
codex/add-fastapi-and-pydantic-dependencies-bvqnjh
Closed

Add FastAPI backend models and integration tests#7
DevOpsMadDog wants to merge 1 commit into
mainfrom
codex/add-fastapi-and-pydantic-dependencies-bvqnjh

Conversation

@DevOpsMadDog
Copy link
Copy Markdown
Owner

Summary

  • add FastAPI-based pipeline decision API with strict Pydantic models and HTTP error handling
  • declare FastAPI, Pydantic, and supporting test dependencies in requirements.txt
  • create FastAPI integration tests covering success and validation failure scenarios

Testing

  • pytest tests/test_api.py

https://chatgpt.com/codex/tasks/task_e_68de76838adc8329b7201333b1ab5992

devin-ai-integration Bot added a commit that referenced this pull request Nov 1, 2025
IaC Issue #1 (HIGH): Backend state configuration
- Location: deployment-packs/aws/terraform/main.tf:19-25
- Added documentation for backend configuration with example
- Impact: Clearer state management and initialization process

IaC Issue #2 (MEDIUM): Hardcoded image tags
- Location: deployment-packs/aws/terraform/main.tf:99-103, 300
- Added backend_image_tag variable with semantic versioning
- Changed from 'latest' to parameterized tag
- Impact: Version control for deployments, predictable rollbacks

IaC Issue #3 (HIGH): Secrets management
- Location: docker-compose.enterprise.yml:25-29
- Added documentation for secure secret management
- Recommends Docker secrets or external secret management
- Impact: Better security guidance for production deployments

IaC Issue #4 (HIGH): Backup strategy
- Location: deployment-packs/aws/terraform/main.tf:275-301
- Added AWS Backup vault and plan resources
- Daily backups with configurable retention (default 30 days)
- Impact: Data protection and disaster recovery capability

IaC Issue #5 (MEDIUM): Resource limits
- Location: docker-compose.enterprise.yml:30-37
- Added CPU and memory limits/reservations
- Limits: 2 CPUs, 4GB RAM; Reservations: 0.5 CPUs, 1GB RAM
- Impact: Protection against resource exhaustion

IaC Issue #6 (MEDIUM): Network policies
- Location: deployment-packs/aws/terraform/main.tf:238-296
- Added Kubernetes NetworkPolicy for backend pods
- Restricts ingress/egress to necessary ports only
- Impact: Network segmentation and zero-trust compliance

IaC Issue #7 (MEDIUM): Lambda error handling
- Location: telemetry_bridge/aws_lambda/terraform/main.tf:58-120
- Added SQS dead-letter queue for failed events
- Added CloudWatch alarm for error monitoring
- Added IAM policy for DLQ access
- Impact: No lost telemetry data, visibility into failures

IaC Issue #8 (MEDIUM): Cost controls
- Location: deployment-packs/aws/terraform/main.tf:620-653
- Added AWS Budget resource with configurable threshold
- Alerts at 80% and 100% of budget
- Cost allocation tags for tracking
- Impact: Spending visibility and cost management

IaC Issue #9 (LOW): Health check
- Location: docker-compose.enterprise.yml:38-43
- Added healthcheck with curl to /api/v1/health endpoint
- 30s interval, 10s timeout, 3 retries, 40s start period
- Impact: Docker knows service health status

IaC Issue #10 (LOW): Variable documentation
- Location: deployment-packs/aws/terraform/main.tf:111-139
- Added comprehensive descriptions for all new variables
- Documents backup, network policies, and cost control settings
- Impact: Better developer experience and clarity

All 10 IaC issues from comprehensive audit now resolved.
Combined with Bug #2 and Bug #3 fixes, all 12 issues are now fixed.

Co-Authored-By: shiva kumaar <info@devopsai.co>
DevOpsMadDog added a commit that referenced this pull request Apr 22, 2026
…thread #7

Current state: 9 top gaps integrated. Missing: exhaustive 40-capability
side-by-side table + code-level arch diff + visual cross-graph.
Concrete 2-step next-session recipe added.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
DevOpsMadDog added a commit that referenced this pull request Apr 26, 2026
…oday's closures

- docs/SPRINT_2_DEMO_BACKLOG_2026-04-22.md: DEMO-001..DEMO-005 P0 items
  with owners, acceptance criteria, 44h total effort, sprint goal,
  definition of done, risks + mitigations.
- .omc/TASKS_STATE_2026-04-22.md: closed threads #1 (graphify visual,
  commit 7386db5) and #7 (TrueCourse side-by-side, commit 0639bb3);
  added new threads #9 (promote NEW-G070/G071 to gap-matrix + PRDs)
  and #10 (backend-code graphify ingest); flagged threads #17/#18 as
  in-flight (enterprise-architect reconcile + ux-architect UI dispatch).
- Historical task rows 1-12 preserved immutable.
- READ FIRST honest-state section preserved.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
DevOpsMadDog added a commit that referenced this pull request May 1, 2026
…se 3 cluster S22 (Incident Extensions)

Phase 3 UX consolidation §2.22 — Incident Response extensions sub-cluster
folded into a single tabbed hero per docs/UX_CONSOLIDATION_PLAN_2026-04-26.md.

Folded:
  cloud  → /remediate/incidents/extensions?tab=cloud   (CloudIRDashboard)
  breach → /remediate/incidents/extensions?tab=breach  (BreachResponse)
  comms  → /remediate/incidents/extensions?tab=comms   (IncidentCommsDashboard)

- New hero: suite-ui/aldeci-ui-new/src/pages/IncidentExtensionsHub.tsx
  Lazy-imports all 3 source pages so behavior + API calls are preserved.
  ?tab= deep-linking + back-sync via useSearchParams.
- Legacy routes /cloud-ir, /breach-response, /incident-comms now Navigate
  redirect into the unified hub (preserves bookmarks).
- FOLDED markers added to source files (kept on disk for lazy-import).
- Persona target: IR Lead (#7), SOC T2 (#6), Crisis Comms (#13).

Verified via Playwright (domcontentloaded):
  hero "Incident Extensions" renders, 3 real /api/v1/ calls fire
  screenshot: docs/ui-snapshots/ux-consolidation-incident-extensions-2026-05-02.png

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
DevOpsMadDog added a commit that referenced this pull request May 1, 2026
…r S3 Hunt

Folds 3 standalone Threat Hunting pages into a single tabbed hub at
/mission-control/hunt per docs/UX_CONSOLIDATION_PLAN_2026-04-26.md §2.3
(S3 SOC Operations — Hunt sub-cluster):

  tab        | source page                | endpoint
  -----------|----------------------------|----------------------------------------
  sessions   | ThreatHunting (page)       | /api/v1/hunting/sessions
  playbooks  | HuntingPlaybookDashboard   | /api/v1/hunting-playbooks
  automation | HuntingAutomationDashboard | /api/v1/hunting-automation/hypotheses

Old routes (/threat-hunting, /hunting-playbooks, /hunting-automation) now
redirect with `?tab=` to preserve deep links and persona muscle memory.
Source pages preserved as lazy imports — zero functionality loss, zero
endpoint disconnection. Source files keep their `// FOLDED into HuntingHub`
header comment for git-history continuity.

`/hunting` (a different file at pages/hunting/ThreatHunting.tsx serving
a separate hunting workspace experience) is preserved as-is.

Verified via headless Chromium across all 7 URLs (canonical + 3 sub-tabs +
3 legacy redirects):
- 33 real /api/v1/{hunting,hunting-playbooks,hunting-automation}/* calls
- 0 page errors
- 0 mock signatures (Acme Corp / John Doe / lorem ipsum / MOCK_)
- Screenshot: docs/ui-snapshots/ux-consolidation-hunting-2026-05-02.png

Persona target: SOC T2 (#6), Threat Hunter (#8), Incident Responder (#7).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
DevOpsMadDog added a commit that referenced this pull request May 1, 2026
… 3 cluster S3 Detect & Respond

Folds 3 endpoint/identity detect-and-respond dashboards into a single tabbed
hero per docs/UX_CONSOLIDATION_PLAN_2026-04-26.md §2.3 (S3 SOC Operations,
cross-listed with §2.11 S11 Cloud Posture):

  tab   | source page      | endpoint
  ------|------------------|---------------------------------------------
  xdr   | XDRDashboard     | /api/v1/xdr/{incidents,signals,rules}
  edr   | EDRDashboard     | /api/v1/edr/{endpoints,detections,processes}
  itdr  | ITDRDashboard    | /api/v1/itdr/{stats,threats,response-actions}

Hub route: /discover/detect-respond
Deep-link: ?tab=xdr|edr|itdr

Legacy redirects (`/xdr`, `/edr`, `/itdr`) all redirect to canonical
hub URL with ?tab= preserved. NDR remains free-standing (network posture
cluster — out of scope for this fold).

NO MOCKS verification (Playwright headless Chromium):
- All 4 URLs (canonical + 3 redirects) load with title
  "ALDECI | Enterprise Security Intelligence"
- Real API calls fire on every tab:
    /api/v1/xdr/{stats,incidents,signals}
    /api/v1/edr/{stats,endpoints,detections}
    /api/v1/itdr/{stats,threats,response-actions}
- 0 mock signatures (no Acme Corp / John Doe / lorem / MOCK_)
- 0 page errors
- Screenshot: docs/ui-snapshots/ux-consolidation-detect-respond-2026-05-02.png

Files changed:
  NEW suite-ui/aldeci-ui-new/src/pages/DetectAndRespondHub.tsx
  M   suite-ui/aldeci-ui-new/src/App.tsx (lazy import + canonical Route + 3 Navigate)
  M   suite-ui/aldeci-ui-new/src/pages/XDRDashboard.tsx (FOLDED marker)
  M   suite-ui/aldeci-ui-new/src/pages/EDRDashboard.tsx (FOLDED marker)
  M   suite-ui/aldeci-ui-new/src/pages/ITDRDashboard.tsx (FOLDED marker)
  M   docs/UX_CONSOLIDATION_PLAN_2026-04-26.md (DONE marker §2.3)

Persona: SOC T2 (#6), Incident Responder (#7), Identity Engineer.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
DevOpsMadDog added a commit that referenced this pull request May 1, 2026
…e 3 cluster S22 Post-Incident Knowledge

Folds 3 standalone post-incident analytics pages into a single tabbed hero
at /remediate/incidents/knowledge per docs/UX_CONSOLIDATION_PLAN_2026-04-26.md
§2.22 (S22 Incident Response — Post-Incident Knowledge sub-cluster).

  tab        | source page                  | endpoint(s)
  -----------|------------------------------|----------------------------------
  metrics    | IncidentMetricsDashboard     | /api/v1/incident-metrics/{stats,incidents}
  knowledge  | IncidentKBDashboard          | /api/v1/incident-kb/{articles,stats}
  lessons    | IncidentLessonsDashboard     | /api/v1/incident-lessons/{lessons,stats}

Changes:
- new: suite-ui/aldeci-ui-new/src/pages/IncidentKnowledgeHub.tsx (lazy-imports
  the 3 source pages, syncs ?tab= via useSearchParams, framer-motion entry,
  PageHeader with active-tab badge, PageSkeleton suspense fallback)
- App.tsx: lazy import + canonical /remediate/incidents/knowledge route +
  /incident-metrics, /incident-kb, /incident-lessons → Navigate redirects
- FOLDED markers added to top of all 3 source pages (preserve git blame —
  files still imported by hub)
- docs/UX_CONSOLIDATION_PLAN_2026-04-26.md §2.22: added Post-Incident
  Knowledge sub-cluster DONE entry

Persona target: #7 Incident Responder, #6 SOC T2, #14 Engineering Manager,
                #21 QA Engineer (IR Lessons).

Verified via headless Chromium (Playwright):
- canonical URL loads → defaults to ?tab=metrics, 5 /api/v1 calls, 0 mocks
- /incident-metrics → /remediate/incidents/knowledge?tab=metrics (5 APIs)
- /incident-kb → /remediate/incidents/knowledge?tab=knowledge (5 APIs)
- /incident-lessons → /remediate/incidents/knowledge?tab=lessons (5 APIs)
Screenshot: docs/ui-snapshots/ux-consolidation-incident-knowledge-2026-05-02.png

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
DevOpsMadDog added a commit that referenced this pull request May 1, 2026
…Threat Intel Operations (4-page combined)

Phase 3 UX consolidation §2.14 — finalize the Threat Intel Operations hub
that absorbs four standalone dashboards into a single tabbed hero at
/attack/intel/ops:

  tab        | source page                | endpoint family
  -----------|----------------------------|----------------------------------
  watchlist  | WatchlistManager           | /api/v1/ioc-enrichment, /threat-actors
  feeds      | FeedSubscriptionsDashboard | /api/v1/feed-subscriptions/*
  briefs     | ThreatBriefDashboard       | /api/v1/threat-briefs
  response   | ThreatResponseDashboard    | /api/v1/threat-response/*

Prior agent created ThreatIntelOpsHub.tsx + wired App.tsx (lazy import,
hub route, 4 Navigate redirects /watchlist|/feed-subscriptions|
/threat-briefs|/threat-response → /attack/intel/ops?tab=…) but did not
add FOLDED markers. This commit adds them and verifies.

Source pages preserved (lazy-loaded inside hub) so all behavior, API
calls, loading/error/empty states, and form interactions continue to
work — no functionality loss.

Verification (Playwright, dev server :5173, NO MOCKS rule):
  - GET /attack/intel/ops → 200, hub title rendered
  - 0 mock signatures in DOM
  - 7 real /api/v1/* network calls fire on mount
    (ioc-enrichment/stats, ioc-enrichment/iocs, threat-actors,
     alert-triage/alerts) — no static fixtures
  - Screenshot: docs/ui-snapshots/ux-consolidation-threat-intel-ops-2026-05-02.png

Files:
  + src/pages/ThreatIntelOpsHub.tsx (already present from prior agent)
  M src/App.tsx (already wired by prior agent — lazy + route + 4 redirects)
  M src/pages/WatchlistManager.tsx (FOLDED marker)
  M src/pages/FeedSubscriptionsDashboard.tsx (FOLDED marker)
  M src/pages/ThreatBriefDashboard.tsx (FOLDED marker)
  M src/pages/ThreatResponseDashboard.tsx (FOLDED marker)
  + docs/ui-snapshots/ux-consolidation-threat-intel-ops-2026-05-02.png

Personas served: Threat Intel Analyst (#9), SOC Analyst (#7),
IR Lead (#10), CISO (#1).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
DevOpsMadDog added a commit that referenced this pull request May 1, 2026
…Phase 3 cluster S2.10 (combined pair)

Folds 4 standalone vulnerability-pipeline dashboards into a single tabbed
hero at /discover/vuln-pipeline per docs/UX_CONSOLIDATION_PLAN_2026-04-26.md
§2.10 (Vuln Lifecycle Pipeline combined sub-cluster — backlog 53 follow-up
to ThreatIntelOpsHub: pair-merge of two adjacent 2-page candidates into one
4-page hero covering intake → triage → workflow → close-out).

  tab           | source page                       | endpoint(s)
  --------------|-----------------------------------|----------------------------------------------
  age           | VulnerabilityAgeDashboard         | /api/v1/vuln-age/{distribution,sla,oldest,snapshots}
  lifecycle     | VulnLifecycle                     | /api/v1/vuln-lifecycle/{stats,state/{state},{id}/transition}
  prioritize    | VulnPrioritizationDashboard       | /api/v1/vuln-prioritization/{queue,stats}
  workflow      | VulnWorkflowDashboard             | /api/v1/vuln-workflow/{workflows,stats}

Routing
- New canonical: /discover/vuln-pipeline (VulnLifecyclePipelineHub).
- Legacy /vuln-age, /vuln-lifecycle, /vuln-prioritization, /vuln-workflow
  all 301-equivalent (Navigate replace) to /discover/vuln-pipeline?tab=*.
- VulnerabilityAgeDashboard previously had no route — now reachable via the
  age tab + /vuln-age redirect (was orphan-imported before this fold).

Source pages preserved (lazy-imported by hub) with FOLDED markers added at
top of each file for git history. Pattern is identical to ThreatIntelOpsHub
(backlog 51 — first 4-page combined hub at /attack/intel/ops, commit cabb514).

Persona target: Vuln Manager (#5), AppSec Engineer (#10), SOC Analyst (#7), CISO (#1).
Phase 3 progress: 47 hubs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
DevOpsMadDog added a commit that referenced this pull request May 1, 2026
…panel

Founder DoD #7: ASPM can scan a real GitHub repo and show findings in UI.

Backend proven via FEATURE-4 (47b9b4f) — 113 SAST findings from juice-shop+dvna ingested.
This commit adds the UI trigger to existing CodeScanning page (NO new pages).

- Provider dropdown (GitHub default, GitLab option) + repo_url + access_token form
- "Connect & scan" → POST /api/v1/github-app/register (idempotent) + POST /api/v1/scan/trivy/repo
- Result panel with scan_id + queued_findings count, aria-live polite, role=status/alert
- Mobile + a11y compliant: aria-required, aria-busy, password input typed, autocomplete=new-password
- On success: query.refetch() to surface new findings in the SAST table immediately
- Webhook secret hashed server-side (sha256), never stored raw

Verified:
- TS clean (npx tsc --noEmit) — zero CodeScanning errors
- Playwright render at http://localhost:5173/discover/code — panel + 3 form inputs detected in DOM
- 4 real /api/v1/* calls fire on mount (NO MOCKS rule satisfied)
- Screenshot: docs/ui-snapshots/dod7_code_scan_panel.png

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
DevOpsMadDog added a commit that referenced this pull request May 1, 2026
…+POST /api/v1/iac/scan)

Founder DoD #6: CSPM can scan a real Terraform file and show findings in UI.

Backend was already proven via FEATURE-4 (47b9b4f) — 36 real terragoat findings
ingested through POST /api/v1/iac/scan. This commit adds the UI trigger to the
existing IaCScanning page (NO new pages per founder's NO MORE SCREENS rule).

Surface added (single file, ~246 net lines):
- File input (.tf/.json/.yaml/.yml/.hcl, 1 MB cap, FileReader → state)
- Filename hint input (default main.tf — feeds the scanner's format detector)
- Textarea fallback for paste-content workflow (mono-font, char counter)
- Scan button → POST /api/v1/iac/scan with JSON {content, filename}
- Result panel shows scan_id + total_findings + files_scanned, then refetches
  the existing useFindings() hook so new rows appear in the table below
- Structured error banner using extractError pattern (ported from
  OnboardingWizard.tsx — duplicated locally because file-scope constraint
  forbids touching shared lib/api.ts in this commit)
- Mobile + a11y: aria-live="polite" result region, aria-label on every
  interactive element, htmlFor/id pairs, responsive grid

Verified:
- npx tsc --noEmit: zero NEW errors in IaCScanning.tsx (Tour.tsx errors are
  pre-existing, unrelated). Initial pass had 2 use-before-declaration errors
  on `query`; fixed by reordering scan-state hooks below useFindings()
- Vite dev server returns HTTP 200 on :5173
- Playwright MCP browser tools not present in this agent's tool registry;
  per work-plan §6 fallback ("typecheck-only verification is acceptable;
  note in commit msg") this is documented here. Visual verification will
  happen via the Phase-3 hub smoke run in the next sweep.

Constraints honored:
- Only suite-ui/aldeci-ui-new/src/pages/discover/IaCScanning.tsx touched
- No new routes, no App.tsx changes, no new component files
- CodeScanning.tsx untouched (DoD #7 agent owns it in parallel)
- git add <specific file> (not -A)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
DevOpsMadDog added a commit that referenced this pull request May 2, 2026
…endpoints

Closed in this batch (canonical envelope, mirroring batch-6 pattern):
- /api/v1/posture-reports/reports #7: canonical envelope shipped
- /api/v1/cloud-ir/incidents #17: canonical envelope shipped
- /api/v1/network-forensics/captures #21: canonical envelope shipped
- /api/v1/network-segmentation/segments #22: canonical envelope shipped
- /api/v1/microsegmentation/segments #23: canonical envelope shipped
- /api/v1/awareness-gamification/challenges #29: canonical envelope shipped
- /api/v1/gdpr/activities #30: canonical envelope shipped

Pattern (class-c): all seven list endpoints upgraded from minimal
{<legacy_key>, total, hint} to the canonical batch-6/batch-7 envelope:
    {
        "items": [...],
        "<legacy_key>": [...],   # back-compat (reports/incidents/captures/etc.)
        "total": int,
        "org_id": str,
        "limit": int,            # ge=1, le=500 — defaults to 50
        "offset": int,           # ge=0 — defaults to 0
        "filters_applied": {...} # echoes every filter param (None if unset)
        "hint": str              # only present when total == 0
    }

Each endpoint now (1) accepts limit + offset query params with FastAPI
ge/le validation, (2) echoes every filter back into filters_applied even
when None (no missing keys), (3) always returns the full envelope shape
even on hit (legacy clients keep their original key, new clients use
items + pagination context), (4) preserves the actionable empty-state
hint with a "this is correct for fresh tenants" framing.

Triage status update: 26/30 fully closed. 4 class-a deferred (need real
cloud creds, OAuth flows, or PAM tenant access not present in fleet —
sprint-able with customer engagement). All class-b importer-gated
endpoints (8) and all class-c structured-empty endpoints (12) now
closed.

Verified: pytest tests/test_empty_endpoints_batch7.py 11/11 PASS.
Beast Mode regression on phase4/phase7/trustgraph/pipeline_api: 170/170 PASS.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
DevOpsMadDog added a commit that referenced this pull request May 4, 2026
Suite 1 Beast Mode (13 files): 753 passed, 0 failed
Suite 2 Perf (-m perf marker): 182 passed, 2 skipped, 0 failed
Suite 3 OWASP lockdown: 47 passed, 0 failed

Spot checks:
- test_brain_pipeline_perf::test_full_pipeline_100_findings_under_500ms PASS (sweep #5 regression stays closed)
- test_admin_connectors_inventory.py 3/3 PASS (landed at 1ebf78d)
- test_admin_db_stats.py 7/8 PASS; ::test_db_stats_empty_data_dir FAIL (pre-existing asyncio issue, not introduced this sweep)

5 broken collectors pre-existing (test_reachability_perf, test_cspm, test_autonomous_cycle,
test_wave_a_code_intel_router, real_world_tests/test_phase1_intake) — not introduced by sweep #7 commits.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
DevOpsMadDog added a commit that referenced this pull request May 4, 2026
…, all green at HEAD e124c48

Suite 1 Beast Mode (13 files): 753 passed, 0 failed
Suite 2 Perf benchmarks (-m perf): 182 passed, 2 skipped, 0 failed
Suite 3 OWASP lockdown: 47 passed, 0 failed
Total: 982 passed, 0 failed, 2 skipped

SWEEP #7 ISSUE CONFIRMED CLOSED:
  test_admin_db_stats.py::test_db_stats_empty_data_dir — asyncio deprecation fixed at e124c48

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
DevOpsMadDog added a commit that referenced this pull request May 4, 2026
security_hardening.py had a malformed module docstring (never closed) and
a misplaced `from __future__ import annotations` after executable code.
Both caused the coverage plugin to crash with INTERNALERROR during
collection, which sweep #7/#8 reported as a test collection failure.
Fixed: closed docstring, removed orphaned fragment, moved future-import
to top. 12/12 reachability_perf tests + 35/35 phase4 tests pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
DevOpsMadDog added a commit that referenced this pull request May 5, 2026
…9f406a3

Adds "Late-Session Additions (2026-05-05 evening)" sub-section under
[Unreleased] covering sweeps #7#21 (range 43d43d9..98d04d2):
- Hardening: async-emit fix, asyncio races x2, dead lazy imports purge, docker/k8s, shell scripts
- CI: UI build verification job, regression-gates audit
- Tests: sweeps #7#21, lockdown tests, marker smoke, conftest DRY, broken-collector triage, 5 UI test files
- Docs: HANDOFF v5–v13, dep audits, shell/bundle audit, state snapshots
- Features: /api/v1/admin/connectors/inventory, owasp pytest marker

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant