Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/codex_auto_merge_policy.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
],
"timeout_minutes": 20,
"max_diff_lines": 2400,
"auto_converge_after": 3,
"block_on_review_failure": false
}
}
2 changes: 2 additions & 0 deletions .github/workflows/codex_pr_review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ jobs:
with:
caller_concurrency_key: pr-${{ github.event.pull_request.number || github.run_id }}
allow_unconfigured_backend: true
api_fallback_enabled: "false"
direct_api_primary_enabled: "false"
secrets: inherit
permissions:
contents: read
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/manual-strategy-switch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,9 @@ on:
type: string
default: sync-cloud-run-env.yml

permissions:
contents: read

concurrency:
group: runtime-strategy-switch-${{ inputs.platform }}-${{ inputs.target_name }}
cancel-in-progress: false
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ This repository is the central manifest source for QSL compatibility checks.
- `scripts/check_qsl_compat.py`: validate a repo's QSL compliance in `pyproject.toml`/`uv.lock` against central bundle.
- `python/scripts/qslctl.py`: unified QSL version-control CLI for repo checks, workspace checks, ring reports/plans, and matrix generation.
- `scripts/render_qsl_dependency_graph.py`: render dependency graph for review.
- `compat/bundles/2026.07.2.toml`: current compatibility bundle baseline (CalVer).
- `compat/bundles/2026.07.3.toml`: current compatibility bundle baseline (CalVer).
- `compat/repo-tiers.toml`: repo tier and upgrade ring policy notes.
- [QSL compatibility docs](docs/qsl_compat_upgrade.md)

Expand Down
12 changes: 12 additions & 0 deletions compat/bundles/2026.07.3.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
name = "2026.07.3"
description = "QSL compatibility bundle after runtime QPK pin convergence"
created_at = "2026-07-10"

[repos]
QuantPlatformKit = "69a0256934d081b5ef309a885384b9eb9f62cf90"
UsEquityStrategies = "17ddb86c72d44b2c7b78ba7a10d8f71b21180166"
HkEquityStrategies = "b6a8ac2ad3c8110b5ea74fb059c8206388d63bcd"
CnEquityStrategies = "12c0cd4801060fcb2f9452ffd9a7f48df446ddd0"
CryptoStrategies = "ef78312d7653095f585c4f75d45bf765bedc2751"
QuantStrategyPlugins = "1f3a27b8fd83d71b583f4f5160a748e95fbefaa1"
MarketSignalSources = "bda8ab10b80a646e4b579ef4c0d5dfe90776e908"
8 changes: 4 additions & 4 deletions docs/qsl_compat_upgrade.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ This repository defines the QSL central compatibility manifest and its upgrade p
## 文件结构

- `compat/bundles/*.toml`
- 每个 bundle 用 Calendar Version 命名(当前:`2026.07.2`)。
- 每个 bundle 用 Calendar Version 命名(当前:`2026.07.3`)。
- 记录 QSL 管控的固定内部仓库提交。
- `compat/repo-tiers.toml`
- 记录仓库层级(`core/strategy-lib/pipeline/runtime/ops`)与升级 ring 规则。
Expand All @@ -26,8 +26,8 @@ This repository defines the QSL central compatibility manifest and its upgrade p

```toml
[qsl]
bundle = "2026.07.2" # 选择要对齐的 central bundle
compat = "2026.07.2" # 兼容检查入口(与 bundle 相同)
bundle = "2026.07.3" # 选择要对齐的 central bundle
compat = "2026.07.3" # 兼容检查入口(与 bundle 相同)
tier = "ops/tooling"
upgrade_ring = "ring_e"
allow_legacy = false # 需要临时兼容时可先放开
Expand All @@ -53,7 +53,7 @@ python scripts/render_qsl_dependency_graph.py --repo-root . --format md

## 当前中心兼容基线

- Bundle: `2026.07.2`
- Bundle: `2026.07.3`
- QPK: `37c81901160c5b31127a27dba1c63944933fb6bf`
- UsEquityStrategies: `17ddb86c72d44b2c7b78ba7a10d8f71b21180166`
- HkEquityStrategies: `b6a8ac2ad3c8110b5ea74fb059c8206388d63bcd`
Expand Down
44 changes: 22 additions & 22 deletions internal_dependency_matrix.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"path": "pyproject.toml",
"package": "quant-platform-kit",
"source_repo": "QuantPlatformKit",
"ref": "53b2ca73a5a50257b5d1a3c769b75c40924e4ba6"
"ref": "69a0256934d081b5ef309a885384b9eb9f62cf90"
},
{
"consumer_repo": "BinancePlatform",
Expand All @@ -27,14 +27,14 @@
"path": "uv.lock",
"package": "quant-platform-kit",
"source_repo": "QuantPlatformKit",
"ref": "53b2ca73a5a50257b5d1a3c769b75c40924e4ba6"
"ref": "69a0256934d081b5ef309a885384b9eb9f62cf90"
},
{
"consumer_repo": "CharlesSchwabPlatform",
"path": "pyproject.toml",
"package": "quant-platform-kit",
"source_repo": "QuantPlatformKit",
"ref": "53b2ca73a5a50257b5d1a3c769b75c40924e4ba6"
"ref": "69a0256934d081b5ef309a885384b9eb9f62cf90"
},
{
"consumer_repo": "CharlesSchwabPlatform",
Expand All @@ -48,7 +48,7 @@
"path": "uv.lock",
"package": "quant-platform-kit",
"source_repo": "QuantPlatformKit",
"ref": "53b2ca73a5a50257b5d1a3c769b75c40924e4ba6"
"ref": "69a0256934d081b5ef309a885384b9eb9f62cf90"
},
{
"consumer_repo": "CharlesSchwabPlatform",
Expand Down Expand Up @@ -76,14 +76,14 @@
"path": "pyproject.toml",
"package": "quant-platform-kit",
"source_repo": "QuantPlatformKit",
"ref": "53b2ca73a5a50257b5d1a3c769b75c40924e4ba6"
"ref": "69a0256934d081b5ef309a885384b9eb9f62cf90"
},
{
"consumer_repo": "CnEquityStrategies",
"path": "uv.lock",
"package": "quant-platform-kit",
"source_repo": "QuantPlatformKit",
"ref": "53b2ca73a5a50257b5d1a3c769b75c40924e4ba6"
"ref": "69a0256934d081b5ef309a885384b9eb9f62cf90"
},
{
"consumer_repo": "CryptoLivePoolPipelines",
Expand Down Expand Up @@ -118,21 +118,21 @@
"path": "pyproject.toml",
"package": "quant-platform-kit",
"source_repo": "QuantPlatformKit",
"ref": "53b2ca73a5a50257b5d1a3c769b75c40924e4ba6"
"ref": "69a0256934d081b5ef309a885384b9eb9f62cf90"
},
{
"consumer_repo": "CryptoStrategies",
"path": "uv.lock",
"package": "quant-platform-kit",
"source_repo": "QuantPlatformKit",
"ref": "53b2ca73a5a50257b5d1a3c769b75c40924e4ba6"
"ref": "69a0256934d081b5ef309a885384b9eb9f62cf90"
},
{
"consumer_repo": "FirstradePlatform",
"path": "pyproject.toml",
"package": "quant-platform-kit",
"source_repo": "QuantPlatformKit",
"ref": "53b2ca73a5a50257b5d1a3c769b75c40924e4ba6"
"ref": "69a0256934d081b5ef309a885384b9eb9f62cf90"
},
{
"consumer_repo": "FirstradePlatform",
Expand All @@ -146,7 +146,7 @@
"path": "uv.lock",
"package": "quant-platform-kit",
"source_repo": "QuantPlatformKit",
"ref": "53b2ca73a5a50257b5d1a3c769b75c40924e4ba6"
"ref": "69a0256934d081b5ef309a885384b9eb9f62cf90"
},
{
"consumer_repo": "FirstradePlatform",
Expand Down Expand Up @@ -174,14 +174,14 @@
"path": "pyproject.toml",
"package": "quant-platform-kit",
"source_repo": "QuantPlatformKit",
"ref": "53b2ca73a5a50257b5d1a3c769b75c40924e4ba6"
"ref": "69a0256934d081b5ef309a885384b9eb9f62cf90"
},
{
"consumer_repo": "HkEquityStrategies",
"path": "uv.lock",
"package": "quant-platform-kit",
"source_repo": "QuantPlatformKit",
"ref": "53b2ca73a5a50257b5d1a3c769b75c40924e4ba6"
"ref": "69a0256934d081b5ef309a885384b9eb9f62cf90"
},
{
"consumer_repo": "InteractiveBrokersPlatform",
Expand All @@ -195,7 +195,7 @@
"path": "pyproject.toml",
"package": "quant-platform-kit",
"source_repo": "QuantPlatformKit",
"ref": "53b2ca73a5a50257b5d1a3c769b75c40924e4ba6"
"ref": "69a0256934d081b5ef309a885384b9eb9f62cf90"
},
{
"consumer_repo": "InteractiveBrokersPlatform",
Expand All @@ -216,7 +216,7 @@
"path": "uv.lock",
"package": "quant-platform-kit",
"source_repo": "QuantPlatformKit",
"ref": "53b2ca73a5a50257b5d1a3c769b75c40924e4ba6"
"ref": "69a0256934d081b5ef309a885384b9eb9f62cf90"
},
{
"consumer_repo": "InteractiveBrokersPlatform",
Expand All @@ -237,7 +237,7 @@
"path": "pyproject.toml",
"package": "quant-platform-kit",
"source_repo": "QuantPlatformKit",
"ref": "53b2ca73a5a50257b5d1a3c769b75c40924e4ba6"
"ref": "69a0256934d081b5ef309a885384b9eb9f62cf90"
},
{
"consumer_repo": "LongBridgePlatform",
Expand All @@ -258,7 +258,7 @@
"path": "uv.lock",
"package": "quant-platform-kit",
"source_repo": "QuantPlatformKit",
"ref": "53b2ca73a5a50257b5d1a3c769b75c40924e4ba6"
"ref": "69a0256934d081b5ef309a885384b9eb9f62cf90"
},
{
"consumer_repo": "LongBridgePlatform",
Expand All @@ -272,28 +272,28 @@
"path": "pyproject.toml",
"package": "cn-equity-strategies",
"source_repo": "CnEquityStrategies",
"ref": "73844e92a8570a61e5a9dc6c245809d0b27b89bc"
"ref": "12c0cd4801060fcb2f9452ffd9a7f48df446ddd0"
},
{
"consumer_repo": "QmtPlatform",
"path": "pyproject.toml",
"package": "quant-platform-kit",
"source_repo": "QuantPlatformKit",
"ref": "37c81901160c5b31127a27dba1c63944933fb6bf"
"ref": "69a0256934d081b5ef309a885384b9eb9f62cf90"
},
{
"consumer_repo": "QmtPlatform",
"path": "uv.lock",
"package": "cn-equity-strategies",
"source_repo": "CnEquityStrategies",
"ref": "73844e92a8570a61e5a9dc6c245809d0b27b89bc"
"ref": "12c0cd4801060fcb2f9452ffd9a7f48df446ddd0"
},
{
"consumer_repo": "QmtPlatform",
"path": "uv.lock",
"package": "quant-platform-kit",
"source_repo": "QuantPlatformKit",
"ref": "37c81901160c5b31127a27dba1c63944933fb6bf"
"ref": "69a0256934d081b5ef309a885384b9eb9f62cf90"
},
{
"consumer_repo": "UsEquitySnapshotPipelines",
Expand Down Expand Up @@ -342,14 +342,14 @@
"path": "pyproject.toml",
"package": "quant-platform-kit",
"source_repo": "QuantPlatformKit",
"ref": "53b2ca73a5a50257b5d1a3c769b75c40924e4ba6"
"ref": "69a0256934d081b5ef309a885384b9eb9f62cf90"
},
{
"consumer_repo": "UsEquityStrategies",
"path": "uv.lock",
"package": "quant-platform-kit",
"source_repo": "QuantPlatformKit",
"ref": "53b2ca73a5a50257b5d1a3c769b75c40924e4ba6"
"ref": "69a0256934d081b5ef309a885384b9eb9f62cf90"
}
]
}
12 changes: 12 additions & 0 deletions python/scripts/qslctl.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,14 @@ def _status_bucket(result: RepoCheckResult) -> str:


def _issue_kind(message: str) -> str:
if message.startswith("invalid qsl.tier "):
return "invalid qsl.tier"
if message.startswith("invalid qsl.upgrade_ring "):
return "invalid qsl.upgrade_ring"
if message.startswith("tier/ring mismatch "):
return "tier/ring mismatch"
if message.startswith("forbidden dependency direction "):
return "forbidden dependency direction"
if message.startswith("bundle pin mismatch for "):
return "bundle pin mismatch"
if message.startswith("forbidden short/invalid ref "):
Expand All @@ -197,6 +205,10 @@ def _issue_kind(message: str) -> str:
return "legacy dependency files detected"
if message.startswith("unmanaged qsl dependency "):
return "unmanaged qsl dependency"
if message.startswith("non-canonical qsl.tier "):
return "non-canonical qsl.tier"
if message.startswith("non-canonical qsl.upgrade_ring "):
return "non-canonical qsl.upgrade_ring"
return "other"


Expand Down
Loading
Loading