From b6d8133bb87028cc34cbb89164a6e378e1320941 Mon Sep 17 00:00:00 2001 From: Pigbibi <20649888+Pigbibi@users.noreply.github.com> Date: Sun, 5 Jul 2026 06:14:02 +0800 Subject: [PATCH 1/3] feat: support QSL live constraints Co-Authored-By: Codex --- internal_dependency_matrix.json | 252 +++++++++++++++++++++--- python/tests/test_qsl_compat_checker.py | 97 +++++++++ scripts/check_qsl_compat.py | 42 +++- 3 files changed, 360 insertions(+), 31 deletions(-) diff --git a/internal_dependency_matrix.json b/internal_dependency_matrix.json index 83f3543..a4c0641 100644 --- a/internal_dependency_matrix.json +++ b/internal_dependency_matrix.json @@ -6,7 +6,7 @@ "path": "requirements-lock.txt", "package": "crypto-strategies", "source_repo": "CryptoStrategies", - "ref": "746440683f63c3f696a12278aff9c7af030700c2" + "ref": "64a62781f9194a23548a373c7724e132ef311f1f" }, { "consumer_repo": "BinancePlatform", @@ -20,7 +20,7 @@ "path": "requirements.txt", "package": "crypto-strategies", "source_repo": "CryptoStrategies", - "ref": "746440683f63c3f696a12278aff9c7af030700c2" + "ref": "64a62781f9194a23548a373c7724e132ef311f1f" }, { "consumer_repo": "BinancePlatform", @@ -31,17 +31,31 @@ }, { "consumer_repo": "CharlesSchwabPlatform", - "path": "requirements.txt", + "path": "pyproject.toml", + "package": "quant-platform-kit", + "source_repo": "QuantPlatformKit", + "ref": "7032cde4547e7ec59af15df8935d142461a77051" + }, + { + "consumer_repo": "CharlesSchwabPlatform", + "path": "pyproject.toml", "package": "us-equity-strategies", "source_repo": "UsEquityStrategies", - "ref": "46887bc3f5454d5b59623b1f5efb7c65912c6b8b" + "ref": "9f0e5e2deca8a9c16d711eb4772f08a7901da101" }, { "consumer_repo": "CharlesSchwabPlatform", - "path": "requirements.txt", + "path": "uv.lock", "package": "quant-platform-kit", "source_repo": "QuantPlatformKit", - "ref": "0063af3b4a974650ea58a7d3f26dd1b94f65d3e8" + "ref": "7032cde4547e7ec59af15df8935d142461a77051" + }, + { + "consumer_repo": "CharlesSchwabPlatform", + "path": "uv.lock", + "package": "us-equity-strategies", + "source_repo": "UsEquityStrategies", + "ref": "9f0e5e2deca8a9c16d711eb4772f08a7901da101" }, { "consumer_repo": "CnEquitySnapshotPipelines", @@ -50,26 +64,96 @@ "source_repo": "CnEquityStrategies", "ref": "357dba7e8896a7f488a484d4a3eea33894708ab9" }, + { + "consumer_repo": "CnEquitySnapshotPipelines", + "path": "uv.lock", + "package": "cn-equity-strategies", + "source_repo": "CnEquityStrategies", + "ref": "357dba7e8896a7f488a484d4a3eea33894708ab9" + }, { "consumer_repo": "CnEquityStrategies", "path": "pyproject.toml", "package": "quant-platform-kit", "source_repo": "QuantPlatformKit", - "ref": "0063af3b4a974650ea58a7d3f26dd1b94f65d3e8" + "ref": "7032cde4547e7ec59af15df8935d142461a77051" }, { - "consumer_repo": "FirstradePlatform", + "consumer_repo": "CnEquityStrategies", + "path": "uv.lock", + "package": "quant-platform-kit", + "source_repo": "QuantPlatformKit", + "ref": "7032cde4547e7ec59af15df8935d142461a77051" + }, + { + "consumer_repo": "CryptoLivePoolPipelines", + "path": "pyproject.toml", + "package": "quant-platform-kit", + "source_repo": "QuantPlatformKit", + "ref": "7032cde4547e7ec59af15df8935d142461a77051" + }, + { + "consumer_repo": "CryptoLivePoolPipelines", + "path": "requirements-lock.txt", + "package": "quant-platform-kit", + "source_repo": "QuantPlatformKit", + "ref": "7032cde4547e7ec59af15df8935d142461a77051" + }, + { + "consumer_repo": "CryptoLivePoolPipelines", "path": "requirements.txt", + "package": "quant-platform-kit", + "source_repo": "QuantPlatformKit", + "ref": "7032cde4547e7ec59af15df8935d142461a77051" + }, + { + "consumer_repo": "CryptoLivePoolPipelines", + "path": "uv.lock", + "package": "quant-platform-kit", + "source_repo": "QuantPlatformKit", + "ref": "7032cde4547e7ec59af15df8935d142461a77051" + }, + { + "consumer_repo": "CryptoStrategies", + "path": "pyproject.toml", + "package": "quant-platform-kit", + "source_repo": "QuantPlatformKit", + "ref": "7032cde4547e7ec59af15df8935d142461a77051" + }, + { + "consumer_repo": "CryptoStrategies", + "path": "uv.lock", + "package": "quant-platform-kit", + "source_repo": "QuantPlatformKit", + "ref": "7032cde4547e7ec59af15df8935d142461a77051" + }, + { + "consumer_repo": "FirstradePlatform", + "path": "pyproject.toml", + "package": "quant-platform-kit", + "source_repo": "QuantPlatformKit", + "ref": "7032cde4547e7ec59af15df8935d142461a77051" + }, + { + "consumer_repo": "FirstradePlatform", + "path": "pyproject.toml", "package": "us-equity-strategies", "source_repo": "UsEquityStrategies", - "ref": "46887bc3f5454d5b59623b1f5efb7c65912c6b8b" + "ref": "9f0e5e2deca8a9c16d711eb4772f08a7901da101" }, { "consumer_repo": "FirstradePlatform", - "path": "requirements.txt", + "path": "uv.lock", "package": "quant-platform-kit", "source_repo": "QuantPlatformKit", - "ref": "0063af3b4a974650ea58a7d3f26dd1b94f65d3e8" + "ref": "7032cde4547e7ec59af15df8935d142461a77051" + }, + { + "consumer_repo": "FirstradePlatform", + "path": "uv.lock", + "package": "us-equity-strategies", + "source_repo": "UsEquityStrategies", + "ref": "9f0e5e2deca8a9c16d711eb4772f08a7901da101" }, { "consumer_repo": "HkEquitySnapshotPipelines", @@ -78,82 +162,194 @@ "source_repo": "HkEquityStrategies", "ref": "dbbefb688cd144837aa59581b1930a14c11411ad" }, + { + "consumer_repo": "HkEquitySnapshotPipelines", + "path": "uv.lock", + "package": "hk-equity-strategies", + "source_repo": "HkEquityStrategies", + "ref": "dbbefb688cd144837aa59581b1930a14c11411ad" + }, + { + "consumer_repo": "HkEquityStrategies", + "path": "pyproject.toml", + "package": "quant-platform-kit", + "source_repo": "QuantPlatformKit", + "ref": "7032cde4547e7ec59af15df8935d142461a77051" + }, + { + "consumer_repo": "HkEquityStrategies", + "path": "uv.lock", + "package": "quant-platform-kit", + "source_repo": "QuantPlatformKit", + "ref": "7032cde4547e7ec59af15df8935d142461a77051" + }, { "consumer_repo": "InteractiveBrokersPlatform", - "path": "requirements.txt", + "path": "pyproject.toml", "package": "hk-equity-strategies", "source_repo": "HkEquityStrategies", - "ref": "61993bf261aeccf64b5a75428b9405f4e1d1d682" + "ref": "dbbefb688cd144837aa59581b1930a14c11411ad" }, { "consumer_repo": "InteractiveBrokersPlatform", - "path": "requirements.txt", + "path": "pyproject.toml", + "package": "quant-platform-kit", + "source_repo": "QuantPlatformKit", + "ref": "7032cde4547e7ec59af15df8935d142461a77051" + }, + { + "consumer_repo": "InteractiveBrokersPlatform", + "path": "pyproject.toml", "package": "us-equity-strategies", "source_repo": "UsEquityStrategies", - "ref": "1643f37d723c4d0fdc475ce1030b3d911c07aacb" + "ref": "9f0e5e2deca8a9c16d711eb4772f08a7901da101" }, { "consumer_repo": "InteractiveBrokersPlatform", - "path": "requirements.txt", + "path": "uv.lock", + "package": "hk-equity-strategies", + "source_repo": "HkEquityStrategies", + "ref": "dbbefb688cd144837aa59581b1930a14c11411ad" + }, + { + "consumer_repo": "InteractiveBrokersPlatform", + "path": "uv.lock", "package": "quant-platform-kit", "source_repo": "QuantPlatformKit", - "ref": "0063af3b4a974650ea58a7d3f26dd1b94f65d3e8" + "ref": "7032cde4547e7ec59af15df8935d142461a77051" + }, + { + "consumer_repo": "InteractiveBrokersPlatform", + "path": "uv.lock", + "package": "us-equity-strategies", + "source_repo": "UsEquityStrategies", + "ref": "9f0e5e2deca8a9c16d711eb4772f08a7901da101" }, { "consumer_repo": "LongBridgePlatform", - "path": "requirements.txt", + "path": "pyproject.toml", "package": "hk-equity-strategies", "source_repo": "HkEquityStrategies", - "ref": "61993bf261aeccf64b5a75428b9405f4e1d1d682" + "ref": "dbbefb688cd144837aa59581b1930a14c11411ad" }, { "consumer_repo": "LongBridgePlatform", - "path": "requirements.txt", + "path": "pyproject.toml", "package": "quant-platform-kit", "source_repo": "QuantPlatformKit", - "ref": "0063af3b4a974650ea58a7d3f26dd1b94f65d3e8" + "ref": "7032cde4547e7ec59af15df8935d142461a77051" }, { "consumer_repo": "LongBridgePlatform", - "path": "requirements.txt", + "path": "pyproject.toml", + "package": "us-equity-strategies", + "source_repo": "UsEquityStrategies", + "ref": "9f0e5e2deca8a9c16d711eb4772f08a7901da101" + }, + { + "consumer_repo": "LongBridgePlatform", + "path": "uv.lock", + "package": "hk-equity-strategies", + "source_repo": "HkEquityStrategies", + "ref": "dbbefb688cd144837aa59581b1930a14c11411ad" + }, + { + "consumer_repo": "LongBridgePlatform", + "path": "uv.lock", + "package": "quant-platform-kit", + "source_repo": "QuantPlatformKit", + "ref": "7032cde4547e7ec59af15df8935d142461a77051" + }, + { + "consumer_repo": "LongBridgePlatform", + "path": "uv.lock", "package": "us-equity-strategies", "source_repo": "UsEquityStrategies", - "ref": "46887bc3f5454d5b59623b1f5efb7c65912c6b8b" + "ref": "9f0e5e2deca8a9c16d711eb4772f08a7901da101" }, { "consumer_repo": "QmtPlatform", "path": "pyproject.toml", "package": "cn-equity-strategies", "source_repo": "CnEquityStrategies", - "ref": "f9a0009d55e71d37c037d5787193226c3acb0d1a" + "ref": "357dba7e8896a7f488a484d4a3eea33894708ab9" }, { "consumer_repo": "QmtPlatform", "path": "pyproject.toml", "package": "quant-platform-kit", "source_repo": "QuantPlatformKit", - "ref": "e86554b" + "ref": "7032cde4547e7ec59af15df8935d142461a77051" + }, + { + "consumer_repo": "QmtPlatform", + "path": "uv.lock", + "package": "cn-equity-strategies", + "source_repo": "CnEquityStrategies", + "ref": "357dba7e8896a7f488a484d4a3eea33894708ab9" + }, + { + "consumer_repo": "QmtPlatform", + "path": "uv.lock", + "package": "quant-platform-kit", + "source_repo": "QuantPlatformKit", + "ref": "7032cde4547e7ec59af15df8935d142461a77051" + }, + { + "consumer_repo": "UsEquitySnapshotPipelines", + "path": "pyproject.toml", + "package": "quant-platform-kit", + "source_repo": "QuantPlatformKit", + "ref": "7032cde4547e7ec59af15df8935d142461a77051" }, { "consumer_repo": "UsEquitySnapshotPipelines", "path": "pyproject.toml", "package": "quant-strategy-plugins", "source_repo": "QuantStrategyPlugins", - "ref": "12d01a2fa7da75b6492af7b16f635d45adb322eb" + "ref": "1f3a27b8fd83d71b583f4f5160a748e95fbefaa1" }, { "consumer_repo": "UsEquitySnapshotPipelines", "path": "pyproject.toml", "package": "us-equity-strategies", "source_repo": "UsEquityStrategies", - "ref": "c8df5f9659340965bd7f53998892ed1018ed4254" + "ref": "9f0e5e2deca8a9c16d711eb4772f08a7901da101" + }, + { + "consumer_repo": "UsEquitySnapshotPipelines", + "path": "uv.lock", + "package": "quant-platform-kit", + "source_repo": "QuantPlatformKit", + "ref": "7032cde4547e7ec59af15df8935d142461a77051" }, { "consumer_repo": "UsEquitySnapshotPipelines", + "path": "uv.lock", + "package": "quant-strategy-plugins", + "source_repo": "QuantStrategyPlugins", + "ref": "1f3a27b8fd83d71b583f4f5160a748e95fbefaa1" + }, + { + "consumer_repo": "UsEquitySnapshotPipelines", + "path": "uv.lock", + "package": "us-equity-strategies", + "source_repo": "UsEquityStrategies", + "ref": "9f0e5e2deca8a9c16d711eb4772f08a7901da101" + }, + { + "consumer_repo": "UsEquityStrategies", "path": "pyproject.toml", "package": "quant-platform-kit", "source_repo": "QuantPlatformKit", - "ref": "d786c1140967f0e96e35599d057f0655e5a9ba25" + "ref": "7032cde4547e7ec59af15df8935d142461a77051" + }, + { + "consumer_repo": "UsEquityStrategies", + "path": "uv.lock", + "package": "quant-platform-kit", + "source_repo": "QuantPlatformKit", + "ref": "7032cde4547e7ec59af15df8935d142461a77051" } ] } diff --git a/python/tests/test_qsl_compat_checker.py b/python/tests/test_qsl_compat_checker.py index ebf2ece..f69e066 100644 --- a/python/tests/test_qsl_compat_checker.py +++ b/python/tests/test_qsl_compat_checker.py @@ -99,6 +99,103 @@ def test_not_enforced_bundle_reports_warning_for_short_sha_and_mismatch_but_main self.assertTrue(any("bundle pin mismatch for QuantPlatformKit" in warning for warning in warnings)) self.assertEqual(notes[0], "qsl=" + str(repo_root / "qsl.toml")) + def test_live_constraint_files_allow_full_sha_drift_from_bundle(self): + with tempfile.TemporaryDirectory() as workspace: + compat_root = Path(workspace) + self._write_bundle( + compat_root, + "2026.07.1", + {"QuantPlatformKit": "a" * 40}, + ) + repo_root = self._make_repo_root( + qsl_toml=( + 'tier = "core"\n' + "ring = 0\n" + "allow_legacy = true\n" + "[compat]\n" + 'bundle = "2026.07.1"\n' + 'live_constraint_files = ["constraints.txt"]\n' + ), + pyproject="", + ) + (repo_root / "constraints.txt").write_text( + "quant-platform-kit @ git+https://github.com/QuantStrategyLab/" + f"QuantPlatformKit.git@{'b' * 40}\n", + encoding="utf-8", + ) + + ok, issues, warnings, notes = check_qsl_compat._check(repo_root=repo_root, compat_root=compat_root) + + self.assertTrue(ok) + self.assertEqual(issues, []) + self.assertEqual(warnings, []) + self.assertIn("live_constraint_files=constraints.txt", notes) + + def test_live_constraint_files_still_block_short_refs(self): + with tempfile.TemporaryDirectory() as workspace: + compat_root = Path(workspace) + self._write_bundle( + compat_root, + "2026.07.1", + {"QuantPlatformKit": "a" * 40}, + ) + repo_root = self._make_repo_root( + qsl_toml=( + 'tier = "core"\n' + "ring = 0\n" + "allow_legacy = true\n" + "[compat]\n" + 'bundle = "2026.07.1"\n' + 'live_constraint_files = ["constraints.txt"]\n' + ), + pyproject="", + ) + (repo_root / "constraints.txt").write_text( + "quant-platform-kit @ git+https://github.com/QuantStrategyLab/QuantPlatformKit.git@abc123\n", + encoding="utf-8", + ) + + ok, issues, warnings, notes = check_qsl_compat._check(repo_root=repo_root, compat_root=compat_root) + + self.assertFalse(ok) + self.assertEqual(len(issues), 1) + self.assertIn("forbidden short/invalid ref 'abc123'", issues[0]) + self.assertEqual(warnings, []) + + def test_legacy_reason_suppresses_allowed_legacy_warning(self): + with tempfile.TemporaryDirectory() as workspace: + compat_root = Path(workspace) + self._write_bundle( + compat_root, + "2026.07.1", + {"QuantPlatformKit": "a" * 40}, + ) + repo_root = self._make_repo_root( + qsl_toml=( + 'tier = "pipeline"\n' + "ring = 2\n" + "allow_legacy = true\n" + 'legacy_reason = "runtime deployment compatibility"\n' + "[compat]\n" + 'bundle = "2026.07.1"\n' + "enforce_bundle = false\n" + ), + pyproject="", + ) + (repo_root / "requirements.txt").write_text( + "quant-platform-kit @ git+https://github.com/QuantStrategyLab/" + f"QuantPlatformKit.git@{'b' * 40}\n", + encoding="utf-8", + ) + + ok, issues, warnings, notes = check_qsl_compat._check(repo_root=repo_root, compat_root=compat_root) + + self.assertTrue(ok) + self.assertEqual(issues, []) + self.assertEqual(len(warnings), 1) + self.assertIn("bundle pin mismatch", warnings[0]) + self.assertIn("legacy_reason=runtime deployment compatibility", notes) + if __name__ == "__main__": unittest.main() diff --git a/scripts/check_qsl_compat.py b/scripts/check_qsl_compat.py index 8c06699..f40d571 100755 --- a/scripts/check_qsl_compat.py +++ b/scripts/check_qsl_compat.py @@ -65,7 +65,13 @@ def _get_enforce_bundle(config: dict[str, Any]) -> bool: return bool(config.get("enforce_bundle", True)) -def _load_qsl_config(repo_root: Path) -> dict[str, str | bool]: +def _string_list(value: Any) -> list[str]: + if not isinstance(value, list): + return [] + return [str(item).strip() for item in value if str(item).strip()] + + +def _load_qsl_config(repo_root: Path) -> dict[str, str | bool | list[str]]: qsl_path = repo_root / "qsl.toml" if not qsl_path.exists(): raise FileNotFoundError(f"missing qsl.toml: {qsl_path}") @@ -84,14 +90,21 @@ def _load_qsl_config(repo_root: Path) -> dict[str, str | bool]: upgrade_ring = _get_upgrade_ring(config) allow_legacy = bool(config.get("allow_legacy", False)) + legacy_reason = str(config.get("legacy_reason", "")).strip() enforce_bundle = _get_enforce_bundle(config) + live_constraint_files = _string_list(config.get("live_constraint_files")) + compat = config.get("compat") + if isinstance(compat, dict): + live_constraint_files.extend(_string_list(compat.get("live_constraint_files"))) return { "bundle": bundle, "tier": tier.strip(), "upgrade_ring": upgrade_ring, "allow_legacy": allow_legacy, + "legacy_reason": legacy_reason, "enforce_bundle": enforce_bundle, + "live_constraint_files": sorted(set(live_constraint_files)), "qsl_path": qsl_path.as_posix(), } @@ -170,6 +183,8 @@ def _check(repo_root: Path, compat_root: Path) -> tuple[bool, list[str], list[st upgrade_ring = str(qsl_cfg["upgrade_ring"]) allow_legacy = bool(qsl_cfg["allow_legacy"]) enforce_bundle = bool(qsl_cfg["enforce_bundle"]) + legacy_reason = str(qsl_cfg["legacy_reason"]) + live_constraint_files = set(qsl_cfg["live_constraint_files"]) if isinstance(qsl_cfg["live_constraint_files"], list) else set() qsl_path = str(qsl_cfg["qsl_path"]) notes.append(f"qsl={qsl_path}") @@ -177,6 +192,10 @@ def _check(repo_root: Path, compat_root: Path) -> tuple[bool, list[str], list[st notes.append(f"tier={tier}") notes.append(f"upgrade_ring={upgrade_ring}") notes.append(f"enforce_bundle={enforce_bundle}") + if legacy_reason: + notes.append("legacy_reason=" + legacy_reason) + if live_constraint_files: + notes.append("live_constraint_files=" + ",".join(sorted(live_constraint_files))) bundle_refs = _load_bundle(compat_root, bundle) @@ -187,7 +206,9 @@ def _check(repo_root: Path, compat_root: Path) -> tuple[bool, list[str], list[st else: legacy_refs = _gather_legacy_refs(repo_root) if legacy_refs: - warnings.append("legacy dependency files detected but allowed by qsl.allow_legacy=true") + static_legacy_refs = [ref for ref in legacy_refs if ref.source not in live_constraint_files] + if static_legacy_refs and not legacy_reason: + warnings.append("legacy dependency files detected but allowed by qsl.allow_legacy=true") for legacy_ref in legacy_refs: if legacy_ref.repo not in bundle_refs: issues.append( @@ -195,7 +216,10 @@ def _check(repo_root: Path, compat_root: Path) -> tuple[bool, list[str], list[st f"{legacy_ref.repo}@{legacy_ref.ref}" ) continue - _validate_ref(legacy_ref, bundle_refs[legacy_ref.repo], issues, warnings, enforce_bundle) + if legacy_ref.source in live_constraint_files: + _validate_live_ref(legacy_ref, issues, warnings, enforce_bundle) + else: + _validate_ref(legacy_ref, bundle_refs[legacy_ref.repo], issues, warnings, enforce_bundle) discovered = _gather_repo_refs(repo_root) for pin in discovered: @@ -230,6 +254,18 @@ def _validate_ref(pin: GitRef, expected_ref: str, issues: list[str], warnings: l warnings.append(message) +def _validate_live_ref(pin: GitRef, issues: list[str], warnings: list[str], enforce_bundle: bool) -> None: + if _is_main_ref(pin.ref): + issues.append(f"forbidden ref 'main' in {pin.source}:{pin.line_no}: {pin.repo}") + return + if not _is_full_sha(pin.ref): + message = f"forbidden short/invalid ref '{pin.ref}' in {pin.source}:{pin.line_no}: {pin.repo}" + if enforce_bundle: + issues.append(message) + else: + warnings.append(message) + + def build_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser(description="Check repo QSL compatibility against the central manifest.") parser.add_argument("--repo-root", default=".", type=Path, help="Repository root to check") From 025290cb6aeffc90c8c02adc7bd7b7fae234b1e1 Mon Sep 17 00:00:00 2001 From: Pigbibi <20649888+Pigbibi@users.noreply.github.com> Date: Sun, 5 Jul 2026 06:17:05 +0800 Subject: [PATCH 2/3] chore: keep QSL matrix on merged baseline Co-Authored-By: Codex --- internal_dependency_matrix.json | 252 ++++---------------------------- 1 file changed, 28 insertions(+), 224 deletions(-) diff --git a/internal_dependency_matrix.json b/internal_dependency_matrix.json index a4c0641..83f3543 100644 --- a/internal_dependency_matrix.json +++ b/internal_dependency_matrix.json @@ -6,7 +6,7 @@ "path": "requirements-lock.txt", "package": "crypto-strategies", "source_repo": "CryptoStrategies", - "ref": "64a62781f9194a23548a373c7724e132ef311f1f" + "ref": "746440683f63c3f696a12278aff9c7af030700c2" }, { "consumer_repo": "BinancePlatform", @@ -20,7 +20,7 @@ "path": "requirements.txt", "package": "crypto-strategies", "source_repo": "CryptoStrategies", - "ref": "64a62781f9194a23548a373c7724e132ef311f1f" + "ref": "746440683f63c3f696a12278aff9c7af030700c2" }, { "consumer_repo": "BinancePlatform", @@ -31,31 +31,17 @@ }, { "consumer_repo": "CharlesSchwabPlatform", - "path": "pyproject.toml", - "package": "quant-platform-kit", - "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" - }, - { - "consumer_repo": "CharlesSchwabPlatform", - "path": "pyproject.toml", + "path": "requirements.txt", "package": "us-equity-strategies", "source_repo": "UsEquityStrategies", - "ref": "9f0e5e2deca8a9c16d711eb4772f08a7901da101" + "ref": "46887bc3f5454d5b59623b1f5efb7c65912c6b8b" }, { "consumer_repo": "CharlesSchwabPlatform", - "path": "uv.lock", + "path": "requirements.txt", "package": "quant-platform-kit", "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" - }, - { - "consumer_repo": "CharlesSchwabPlatform", - "path": "uv.lock", - "package": "us-equity-strategies", - "source_repo": "UsEquityStrategies", - "ref": "9f0e5e2deca8a9c16d711eb4772f08a7901da101" + "ref": "0063af3b4a974650ea58a7d3f26dd1b94f65d3e8" }, { "consumer_repo": "CnEquitySnapshotPipelines", @@ -64,96 +50,26 @@ "source_repo": "CnEquityStrategies", "ref": "357dba7e8896a7f488a484d4a3eea33894708ab9" }, - { - "consumer_repo": "CnEquitySnapshotPipelines", - "path": "uv.lock", - "package": "cn-equity-strategies", - "source_repo": "CnEquityStrategies", - "ref": "357dba7e8896a7f488a484d4a3eea33894708ab9" - }, { "consumer_repo": "CnEquityStrategies", "path": "pyproject.toml", "package": "quant-platform-kit", "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" - }, - { - "consumer_repo": "CnEquityStrategies", - "path": "uv.lock", - "package": "quant-platform-kit", - "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" - }, - { - "consumer_repo": "CryptoLivePoolPipelines", - "path": "pyproject.toml", - "package": "quant-platform-kit", - "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" - }, - { - "consumer_repo": "CryptoLivePoolPipelines", - "path": "requirements-lock.txt", - "package": "quant-platform-kit", - "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" - }, - { - "consumer_repo": "CryptoLivePoolPipelines", - "path": "requirements.txt", - "package": "quant-platform-kit", - "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" - }, - { - "consumer_repo": "CryptoLivePoolPipelines", - "path": "uv.lock", - "package": "quant-platform-kit", - "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" - }, - { - "consumer_repo": "CryptoStrategies", - "path": "pyproject.toml", - "package": "quant-platform-kit", - "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" - }, - { - "consumer_repo": "CryptoStrategies", - "path": "uv.lock", - "package": "quant-platform-kit", - "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" - }, - { - "consumer_repo": "FirstradePlatform", - "path": "pyproject.toml", - "package": "quant-platform-kit", - "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" + "ref": "0063af3b4a974650ea58a7d3f26dd1b94f65d3e8" }, { "consumer_repo": "FirstradePlatform", - "path": "pyproject.toml", + "path": "requirements.txt", "package": "us-equity-strategies", "source_repo": "UsEquityStrategies", - "ref": "9f0e5e2deca8a9c16d711eb4772f08a7901da101" + "ref": "46887bc3f5454d5b59623b1f5efb7c65912c6b8b" }, { "consumer_repo": "FirstradePlatform", - "path": "uv.lock", + "path": "requirements.txt", "package": "quant-platform-kit", "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" - }, - { - "consumer_repo": "FirstradePlatform", - "path": "uv.lock", - "package": "us-equity-strategies", - "source_repo": "UsEquityStrategies", - "ref": "9f0e5e2deca8a9c16d711eb4772f08a7901da101" + "ref": "0063af3b4a974650ea58a7d3f26dd1b94f65d3e8" }, { "consumer_repo": "HkEquitySnapshotPipelines", @@ -162,194 +78,82 @@ "source_repo": "HkEquityStrategies", "ref": "dbbefb688cd144837aa59581b1930a14c11411ad" }, - { - "consumer_repo": "HkEquitySnapshotPipelines", - "path": "uv.lock", - "package": "hk-equity-strategies", - "source_repo": "HkEquityStrategies", - "ref": "dbbefb688cd144837aa59581b1930a14c11411ad" - }, - { - "consumer_repo": "HkEquityStrategies", - "path": "pyproject.toml", - "package": "quant-platform-kit", - "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" - }, - { - "consumer_repo": "HkEquityStrategies", - "path": "uv.lock", - "package": "quant-platform-kit", - "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" - }, { "consumer_repo": "InteractiveBrokersPlatform", - "path": "pyproject.toml", + "path": "requirements.txt", "package": "hk-equity-strategies", "source_repo": "HkEquityStrategies", - "ref": "dbbefb688cd144837aa59581b1930a14c11411ad" - }, - { - "consumer_repo": "InteractiveBrokersPlatform", - "path": "pyproject.toml", - "package": "quant-platform-kit", - "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" + "ref": "61993bf261aeccf64b5a75428b9405f4e1d1d682" }, { "consumer_repo": "InteractiveBrokersPlatform", - "path": "pyproject.toml", + "path": "requirements.txt", "package": "us-equity-strategies", "source_repo": "UsEquityStrategies", - "ref": "9f0e5e2deca8a9c16d711eb4772f08a7901da101" - }, - { - "consumer_repo": "InteractiveBrokersPlatform", - "path": "uv.lock", - "package": "hk-equity-strategies", - "source_repo": "HkEquityStrategies", - "ref": "dbbefb688cd144837aa59581b1930a14c11411ad" + "ref": "1643f37d723c4d0fdc475ce1030b3d911c07aacb" }, { "consumer_repo": "InteractiveBrokersPlatform", - "path": "uv.lock", - "package": "quant-platform-kit", - "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" - }, - { - "consumer_repo": "InteractiveBrokersPlatform", - "path": "uv.lock", - "package": "us-equity-strategies", - "source_repo": "UsEquityStrategies", - "ref": "9f0e5e2deca8a9c16d711eb4772f08a7901da101" - }, - { - "consumer_repo": "LongBridgePlatform", - "path": "pyproject.toml", - "package": "hk-equity-strategies", - "source_repo": "HkEquityStrategies", - "ref": "dbbefb688cd144837aa59581b1930a14c11411ad" - }, - { - "consumer_repo": "LongBridgePlatform", - "path": "pyproject.toml", + "path": "requirements.txt", "package": "quant-platform-kit", "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" - }, - { - "consumer_repo": "LongBridgePlatform", - "path": "pyproject.toml", - "package": "us-equity-strategies", - "source_repo": "UsEquityStrategies", - "ref": "9f0e5e2deca8a9c16d711eb4772f08a7901da101" + "ref": "0063af3b4a974650ea58a7d3f26dd1b94f65d3e8" }, { "consumer_repo": "LongBridgePlatform", - "path": "uv.lock", + "path": "requirements.txt", "package": "hk-equity-strategies", "source_repo": "HkEquityStrategies", - "ref": "dbbefb688cd144837aa59581b1930a14c11411ad" + "ref": "61993bf261aeccf64b5a75428b9405f4e1d1d682" }, { "consumer_repo": "LongBridgePlatform", - "path": "uv.lock", + "path": "requirements.txt", "package": "quant-platform-kit", "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" + "ref": "0063af3b4a974650ea58a7d3f26dd1b94f65d3e8" }, { "consumer_repo": "LongBridgePlatform", - "path": "uv.lock", + "path": "requirements.txt", "package": "us-equity-strategies", "source_repo": "UsEquityStrategies", - "ref": "9f0e5e2deca8a9c16d711eb4772f08a7901da101" + "ref": "46887bc3f5454d5b59623b1f5efb7c65912c6b8b" }, { "consumer_repo": "QmtPlatform", "path": "pyproject.toml", "package": "cn-equity-strategies", "source_repo": "CnEquityStrategies", - "ref": "357dba7e8896a7f488a484d4a3eea33894708ab9" + "ref": "f9a0009d55e71d37c037d5787193226c3acb0d1a" }, { "consumer_repo": "QmtPlatform", "path": "pyproject.toml", "package": "quant-platform-kit", "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" - }, - { - "consumer_repo": "QmtPlatform", - "path": "uv.lock", - "package": "cn-equity-strategies", - "source_repo": "CnEquityStrategies", - "ref": "357dba7e8896a7f488a484d4a3eea33894708ab9" - }, - { - "consumer_repo": "QmtPlatform", - "path": "uv.lock", - "package": "quant-platform-kit", - "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" - }, - { - "consumer_repo": "UsEquitySnapshotPipelines", - "path": "pyproject.toml", - "package": "quant-platform-kit", - "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" + "ref": "e86554b" }, { "consumer_repo": "UsEquitySnapshotPipelines", "path": "pyproject.toml", "package": "quant-strategy-plugins", "source_repo": "QuantStrategyPlugins", - "ref": "1f3a27b8fd83d71b583f4f5160a748e95fbefaa1" + "ref": "12d01a2fa7da75b6492af7b16f635d45adb322eb" }, { "consumer_repo": "UsEquitySnapshotPipelines", "path": "pyproject.toml", "package": "us-equity-strategies", "source_repo": "UsEquityStrategies", - "ref": "9f0e5e2deca8a9c16d711eb4772f08a7901da101" - }, - { - "consumer_repo": "UsEquitySnapshotPipelines", - "path": "uv.lock", - "package": "quant-platform-kit", - "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" + "ref": "c8df5f9659340965bd7f53998892ed1018ed4254" }, { "consumer_repo": "UsEquitySnapshotPipelines", - "path": "uv.lock", - "package": "quant-strategy-plugins", - "source_repo": "QuantStrategyPlugins", - "ref": "1f3a27b8fd83d71b583f4f5160a748e95fbefaa1" - }, - { - "consumer_repo": "UsEquitySnapshotPipelines", - "path": "uv.lock", - "package": "us-equity-strategies", - "source_repo": "UsEquityStrategies", - "ref": "9f0e5e2deca8a9c16d711eb4772f08a7901da101" - }, - { - "consumer_repo": "UsEquityStrategies", "path": "pyproject.toml", "package": "quant-platform-kit", "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" - }, - { - "consumer_repo": "UsEquityStrategies", - "path": "uv.lock", - "package": "quant-platform-kit", - "source_repo": "QuantPlatformKit", - "ref": "7032cde4547e7ec59af15df8935d142461a77051" + "ref": "d786c1140967f0e96e35599d057f0655e5a9ba25" } ] } From d285a675c4e7d4149daea39dea36b817ace241a0 Mon Sep 17 00:00:00 2001 From: Pigbibi <20649888+Pigbibi@users.noreply.github.com> Date: Sun, 5 Jul 2026 06:24:15 +0800 Subject: [PATCH 3/3] chore: retrigger required checks Co-Authored-By: Codex