Files
QuantEngineByItz/package.json
T
kjh2064 5589a0432b
Validators (Pushes and Pull Requests) / validate-ui-and-storage (push) Successful in 16s
Validators (Pushes and Pull Requests) / validate-core (push) Failing after 56s
feat(collection): wire KIS collection end-to-end, add price-history pipeline (WBS QE-M0/M1/M2)
Critical re-review of the QuantEngine WBS evidence system found several
regressions of the "no fake gates" discipline established by M0, plus a
still-unwired M1 collection path. This closes 10 more WBS tasks
(QE-M1-01..06, QE-M2-01/02/04/05/06 — see spec/60_quant_engine_wbs.yaml)
with real, gate-verified evidence (18/34 total).

M1 — real KIS data now lands in PostgreSQL end-to-end:
- SchedulerService: load ticker universe from GatherTradingData.json instead
  of a hardcoded array; fix a Hangfire scoped-service resolution bug.
- KisDataCollectionOrchestrator: restore logging on the lineage-event write
  path (was a bare `catch {}` swallowing all failures silently); persist
  daily OHLCV bars into quantengine.price_history_daily per run.
- Verified live: POST /api/collection/run -> Hangfire -> orchestrator ->
  KIS mock API -> PostgreSQL, with Playwright DOM/API parity evidence.

M2 — historical price-history pipeline:
- CollectionRepository: SavePriceHistoryDailyAsync (idempotent upsert),
  GetPriceHistorySummaryAsync (per-ticker aggregation) + a new
  DateOnlyTypeHandler registered globally, since Dapper has no built-in
  System.DateOnly support in either direction (write threw
  NotSupportedException, read threw a constructor-mismatch
  InvalidOperationException — found by exercising both paths live).
- tools/validate_price_history_integrity_v1.py: gap-freeness (vs KIS
  trading calendar) + price-sanity gate over collected history.
- Admin Collection page: new "히스토리 현황" summary table +
  GET /api/collection/history-summary, with Playwright evidence.

Governance/gate fixes:
- validate_market_time_series_schema_v1.py mislabeled its own output
  "runtime_database_query": "DATA_GATED" despite never opening a DB
  connection (pure file/regex check) — relabeled "check_scope":
  "STATIC_STRUCTURAL_ONLY" and wired the node into the release DAG so it
  isn't only reachable from ci.yml, matching every other validator.
  Live-data authority for the same claim stays with QE-M2-01's pg_query
  gate (spec/60), documented in spec/64.
- Fixed a WBS log_pattern check (QE-M1-06) that couldn't match its own
  multi-line target; loosened two depends_on edges (QE-M1-05/06,
  QE-M2-04/05) that encoded "needs X verified" when the real requirement
  was only "needs X's code merged."
- Discovered and fixed admin-pages.spec.ts logging in with the wrong
  seeded password (admin/admin instead of admin/quant123!, per CLAUDE.md)
  — every test in that suite had been silently failing at the login step.

Deferred: QE-M2-03 (2-year backfill) — the KIS mock/VTS token endpoint
started returning 403 after the first successful call this session; looks
like a token-issuance rate limit or credential issue on KIS's side, not a
code defect. Backfilling at scale right now would just generate more 403s,
so left QE-M2-03 PENDING pending KIS account/console verification.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-12 21:07:53 +09:00

81 lines
6.1 KiB
JSON

{
"name": "core-satellite-collector",
"version": "4.0.0",
"type": "module",
"private": true,
"scripts": {
"ops:prepare": "python tools/convert_xlsx_to_json.py",
"ops:validate": "python tools/run_release_dag_v3.py --mode release",
"ops:build": "python tools/build_bundle.py",
"ops:data-collect": "python tools/run_kis_data_collection_v1.py --input-json GatherTradingData.json --sqlite-db src/quant_engine/kis_data_collection.db --output-json Temp/kis_data_collection_v1.json --kis-account real",
"ops:sell-build": "python tools/build_qualitative_sell_inputs_v1.py --batch --workbook GatherTradingData.xlsx --kis-account real --apply",
"ops:sell-satellite": "python tools/build_satellite_candidate_recommendations_v1.py --workbook GatherTradingData.xlsx --apply",
"ops:sell-eval": "python tools/evaluate_qualitative_sell_strategy_accuracy_v1.py --sqlite-db outputs/qualitative_sell_strategy/qualitative_sell_strategy.db",
"ops:sell-validate": "python tools/validate_qualitative_sell_strategy_pipeline_v1.py",
"ops:postgres-stub": "python tools/generate_postgresql_upgrade_stub_v1.py",
"ops:render": "dotnet run --project src/dotnet/QuantEngine.Tools/QuantEngine.Tools.csproj -- report --packet=Temp/final_decision_packet_active.json --out=Temp/operational_report.json",
"ops:snapshot-web": "python tools/run_snapshot_admin_server_v1.py --reload --db src/quant_engine/snapshot_admin.db --seed GatherTradingData.json",
"ops:snapshot-web-watch": "python tools/run_snapshot_admin_server_v1.py --reload --db src/quant_engine/snapshot_admin.db --seed GatherTradingData.json",
"ops:snapshot-validate": "python tools/validate_snapshot_admin_workflow_v1.py",
"ops:snapshot-web-validate": "python tools/validate_snapshot_admin_web_v1.py",
"ops:calibration-backlog": "python tools/build_calibration_priority_v1.py && python tools/build_calibration_change_ledger_v4.py && python tools/build_calibration_review_report_v1.py && python tools/validate_calibration_change_ledger_v1.py",
"ops:calibration-review-report": "python tools/build_calibration_review_report_v1.py",
"ops:calibration-approval-list": "python tools/build_calibration_approval_list_v1.py",
"ops:calibration-decision-draft": "python tools/build_calibration_decision_draft_v1.py",
"ops:sector-refresh": "python tools/update_sector_universe_from_naver.py --limit 10",
"ops:sector-refresh-apply": "python tools/update_sector_universe_from_naver.py --limit 10 --apply",
"ops:sector-validate": "python tools/validate_sector_universe_monthly_refresh_v1.py",
"ops:sector-workbook": "python tools/update_workbook_sector_insights.py",
"ops:release": "python tools/run_release_dag_v3.py --mode full",
"ops:package": "python tools/refresh_trading_calendar.py && python tools/prepare_upload_zip.py --validation-mode release --profile",
"prepare-upload-zip": "python tools/refresh_trading_calendar.py && python tools/prepare_upload_zip.py",
"ops:audit": "python tools/harness_coverage_auditor.py",
"build-prediction-accuracy-harness": "python tools/build_prediction_accuracy_harness_v2.py",
"build-alpha-feedback-loop": "python tools/build_alpha_feedback_loop_v2.py",
"build-operational-alpha-calibration": "python tools/build_operational_alpha_calibration_v2.py",
"build-sector-flow-history-progress": "python tools/build_sector_flow_history_progress_v1.py",
"validate-data-gated-progress": "python tools/validate_data_gated_progress_v1.py",
"build-realized-performance": "python tools/build_realized_performance_v1.py",
"validate-completion-harness": "python tools/validate_completion_harness_instructions_v1.py",
"validate-prediction-accuracy-harness": "python tools/validate_prediction_accuracy_harness_v2.py",
"validate-alpha-feedback-loop": "python tools/validate_alpha_feedback_loop_v2.py",
"validate-operational-alpha-calibration": "python tools/validate_operational_alpha_calibration_v2.py",
"build-calibration-priority": "python tools/build_calibration_priority_v1.py",
"build-calibration-change-ledger": "python tools/build_calibration_change_ledger_v4.py",
"validate-calibration-change-ledger": "python tools/validate_calibration_change_ledger_v1.py",
"validate-sector-flow-history-progress": "python tools/validate_sector_flow_history_progress_v1.py",
"validate-realized-performance": "python tools/validate_realized_performance_v1.py",
"validate-gas-recovery": "python tools/validate_gas_orchestration_recovery_v1.py",
"ops:clean": "python tools/clean_temp_artifacts_v1.py",
"ops:dev": "node core_satellite_collector.js",
"full-gate": "python tools/run_release_dag_v3.py --mode release --strict",
"validate-engine-strict": "python tools/run_release_dag_v3.py --mode release --strict",
"validate-behavioral-coverage": "python tools/validate_behavioral_coverage_v1.py --strict",
"validate-engine-integrity": "python tools/run_release_dag_v3.py --mode release --strict",
"render-report-json": "dotnet run --project src/dotnet/QuantEngine.Tools/QuantEngine.Tools.csproj -- report --packet=Temp/final_decision_packet_active.json --out=Temp/operational_report.json",
"verify:task": "python tools/verify_wbs_task_v1.py --task",
"collect:remote-evidence": "python tools/collect_remote_wbs_evidence_v1.py",
"verify:wbs": "python tools/validate_quant_engine_wbs_v1.py",
"validate:normalized-learning-store": "python tools/validate_normalized_learning_store_v1.py",
"validate:dotnet-cutover": "python tools/validate_dotnet_postgresql_json_cutover_v1.py",
"validate:runtime-settings": "python tools/validate_runtime_connection_settings_immutability_v1.py",
"validate:market-schema": "python tools/validate_market_time_series_schema_v1.py",
"test:e2e": "playwright test --project=chromium",
"test:evidence": "playwright test --project=evidence"
},
"dependencies": {
"cheerio": "1.2.0",
"googleapis": "^171.4.0",
"iconv-lite": "0.7.2",
"yahoo-finance2": "3.15.3"
},
"optionalDependencies": {
"adm-zip": "0.5.17",
"fast-xml-parser": "5.8.0"
},
"devDependencies": {
"@playwright/test": "^1.61.1",
"xlsx": "^0.18.5"
}
}