70824c2afb
Consolidates duplicate KIS API client implementations (governance tests were exercising an unused class instead of the one actually running in production), closes a SQL injection path in the DB admin page, fixes a migration that used MySQL-only syntax and had never actually applied (confirmed against production), resyncs docs/db/quantengine.dbml with all migrations, and removes a duplicate OMS·WMS·ERP frontend tree in favor of src/frontend/. Also corrects several unverifiable/inflated claims in the OMS planning docs and realigns CI/CD and architecture documentation with what's actually in the repo. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
6.4 KiB
6.4 KiB
QuantEngine CI/CD Pipeline Structure
Full Gitea Actions workflow structure, extracted from CLAUDE.md (2026-07-30) to keep the main file within the character budget.
Workflow Architecture Refactoring (2026-07-24)
2026-07-24 refactoring: Single-job ci.yml (30+ steps, ~40min runtime) → 9-job parallel pipeline (~15-20min runtime).
CI Pipeline Jobs (ci.yml)
| Job | Dependencies | Purpose | Parallelizable |
|---|---|---|---|
| core | — | CRITICAL: .NET tests, API trading gate, KIS creds, DB migrations | ✗ (blocks others) |
| wbs-audit | core | WBS validation, platform migration, coverage audits | ✓ |
| dotnet-contracts | core | .NET parity, provenance, scheduler, normalization contracts | ✓ |
| ui-storage | — | Admin UI, storage backend, integration tests | ✓ |
| database-schema | — | DB pipeline, PostgreSQL schema, history contracts | ✓ |
| calibration-pipeline | core | Calibration priority, change ledger, qualitative sell strategy | ✓ |
| operational-reporting | calibration | Decision packet, operational report, performance metrics | ✗ (depends on calibration) |
| security-validation | — | Secrets contract, workflow validation | ✓ |
| workflow-lint | — | CI workflow structure, secrets contract | ✓ |
| notify-results | ALL | PR notification with job status summary | — |
Dependency Graph:
core ─┬─> wbs-audit ─────────────────────┐
├─> dotnet-contracts ─────────────┤
└─> calibration-pipeline ────────┤
└─> operational-reporting ─┤
└─> notify-results
ui-storage ────────────────────────────────┘
database-schema ──────────────────────────┘
security-validation ───────────────────────┘
workflow-lint ─────────────────────────────┘
Other Workflow Files
| File | Trigger | Purpose | Status |
|---|---|---|---|
| kis_data_collection.yml | cron (00:30 KST M-F) + dispatch | Validate KIS credentials & PostgreSQL pipeline | ✓ 2026-07-24 |
| qualitative_sell_strategy.yml | cron (00:15 KST M-F) + push + dispatch | Validate sell strategy pipeline & store | ✓ 2026-07-24 |
| ci_lint.yml | push (.gitea/workflows/) + dispatch | Lint all workflow files, validate job dependencies, secrets contract | ✓ 2026-07-24 |
| snapshot_admin.yml | push (snapshot_admin_*) + dispatch | Validate snapshot admin workflow & UI (2 jobs) | ✓ 2026-07-24 |
| ci-frontend.yml | push (main/master/feature/**) + PR | 8-step src/frontend/ pipeline: install, typecheck, import-boundary lint, unit test, enterprise CRUD contract parity, Vite build, Playwright E2E, npm audit |
✓ (undocumented until 2026-07-30) |
| t20_ledger.yml | cron (17:00 KST M-F) + dispatch | Build tools/build_operational_t20_outcome_ledger_v1.py daily T+20 outcome ledger |
✓ (undocumented until 2026-07-30) |
| prepare-release.yml | workflow_run (ci.yml success) + dispatch | Build, tag, create Gitea Release with artifact + checksums | — |
| deploy-prod.yml | dispatch | Deploy release, run health checks, report status (3 jobs) | — |
Note (2026-07-30): An earlier version of this table claimed ci_lint.yml had been renamed to
workflow_lint.yml. That rename was never actually carried out — the file on disk is still
ci_lint.yml. Corrected here after direct verification against .gitea/workflows/.
Performance Improvements (2026-07-24)
ci.yml refactoring results:
- Before: 1 job, 30+ sequential steps, ~40min runtime
- After: 9 jobs, 7 in parallel, ~15-20min total runtime
- Speedup: ~2-2.5x faster CI feedback (core branch blocks only downstream, others parallel)
- Fault isolation: Single validation failure no longer blocks unrelated checks
Key changes:
- Setup consolidation: Database migrations, Python, .NET setup in
corejob only - Parallel validation groups: 7 jobs run independently from core (ui-storage, database-schema, security-validation, workflow-lint, etc.)
- Dependency clarity:
needs:explicitly defines blocking relationships - Error reporting:
notify-resultssummarizes all 9 job statuses in PR comment
Workflow Maintenance Checklist
When modifying workflows (.gitea/workflows/*.yml):
- ✅ Update
ci_lint.ymlif adding new triggers or job dependencies - ✅ Test locally with
python3 tools/validate_gitea_ci_workflow_lint_v1.py - ✅ Verify all
needs:references point to existing jobs - ✅ Document new jobs in this section above
- ✅ Validate YAML syntax:
python3 -m yaml < .gitea/workflows/new.yml - ✅ Ensure no hardcoded secrets in workflow files (env vars only)
Troubleshooting Workflows
Symptom: CI job timeout
- Check: Does your job need PostgreSQL? Only
coreprovides it; others must be independent. - Fix: Add
services: postgres:block or restructure to parallel-safe job.
Symptom: Cascading failure (multiple jobs fail)
- Check: Does your job have missing dependencies? Review
needs:and dependency graph above. - Fix: Add explicit
needs: [job_name]if job depends on another's output.
Symptom: "job not found" error in notify-results
- Check: Job name typo in
notify-results.needslist. - Fix: Match job name exactly (case-sensitive).
Workflow Trigger Schedule (2026-07-24)
| Time (KST) | Workflow | Trigger | Purpose |
|---|---|---|---|
| 00:15 | qualitative_sell_strategy.yml | cron (M-F) | Validate sell strategy before daily operations |
| 00:30 | kis_data_collection.yml | cron (M-F) | Validate KIS API & DB pipeline before data collection |
| Push | ci.yml | on:push (main) | Validate code on every push to main |
| PR | ci.yml | on:pull_request | Gate PR merges with full validation suite |
| Manual | prepare-release.yml | workflow_dispatch | Create release tag & artifact |
| Manual | deploy-prod.yml | workflow_dispatch | Deploy release to production |
Dependencies:
- Release creation (prepare-release.yml) is gated by ci.yml success (workflow_run trigger)
- Deployment (deploy-prod.yml) is manual — only after release artifact exists