@@ -35,19 +35,19 @@ def test_root_compat_bundle_and_ring_schema(self):
3535 compat_root = Path (workspace )
3636 self ._write_bundle (
3737 compat_root ,
38- "2026.07.1 " ,
39- {"QuantPlatformKit" : "7032cde4547e7ec59af15df8935d142461a77051 " },
38+ "2026.07.2 " ,
39+ {"QuantPlatformKit" : "37c81901160c5b31127a27dba1c63944933fb6bf " },
4040 )
4141 repo_root = self ._make_repo_root (
4242 qsl_toml = (
4343 "tier = \" ops/tooling\" \n "
4444 "ring = \" ring_e\" \n "
4545 "[compat]\n "
46- 'bundle = "2026.07.1 "\n '
46+ 'bundle = "2026.07.2 "\n '
4747 ),
4848 pyproject = (
4949 "dependencies = [\n "
50- ' "quant-platform-kit @ git+https://github.com/QuantStrategyLab/QuantPlatformKit.git@7032cde4547e7ec59af15df8935d142461a77051 "\n '
50+ ' "quant-platform-kit @ git+https://github.com/QuantStrategyLab/QuantPlatformKit.git@37c81901160c5b31127a27dba1c63944933fb6bf "\n '
5151 "]\n "
5252 ),
5353 )
@@ -57,26 +57,26 @@ def test_root_compat_bundle_and_ring_schema(self):
5757 self .assertTrue (ok )
5858 self .assertEqual (issues , [])
5959 self .assertEqual (warnings , [])
60- self .assertIn ("bundle=2026.07.1 " , notes )
60+ self .assertIn ("bundle=2026.07.2 " , notes )
6161 self .assertIn ("upgrade_ring=ring_e" , notes )
6262
6363 def test_not_enforced_bundle_reports_warning_for_short_sha_and_mismatch_but_main_stays_issue (self ):
6464 with tempfile .TemporaryDirectory () as workspace :
6565 compat_root = Path (workspace )
6666 self ._write_bundle (
6767 compat_root ,
68- "2026.07.1 " ,
68+ "2026.07.2 " ,
6969 {
70- "QuantPlatformKit" : "7032cde4547e7ec59af15df8935d142461a77051 " ,
71- "UsEquityStrategies" : "9f0e5e2deca8a9c16d711eb4772f08a7901da101 " ,
70+ "QuantPlatformKit" : "37c81901160c5b31127a27dba1c63944933fb6bf " ,
71+ "UsEquityStrategies" : "17ddb86c72d44b2c7b78ba7a10d8f71b21180166 " ,
7272 },
7373 )
7474 repo_root = self ._make_repo_root (
7575 qsl_toml = (
7676 "tier = \" ops/tooling\" \n "
7777 "ring = \" ring_e\" \n "
7878 "[compat]\n "
79- 'bundle = "2026.07.1 "\n '
79+ 'bundle = "2026.07.2 "\n '
8080 "enforce_bundle = false\n "
8181 ),
8282 pyproject = (
@@ -94,26 +94,27 @@ def test_not_enforced_bundle_reports_warning_for_short_sha_and_mismatch_but_main
9494 self .assertFalse (ok )
9595 self .assertEqual (len (issues ), 1 )
9696 self .assertIn ("forbidden ref 'main'" , issues [0 ])
97- self .assertEqual (len (warnings ), 2 )
97+ self .assertEqual (len (warnings ), 3 )
9898 self .assertTrue (any ("forbidden short/invalid ref 'abc123'" in warning for warning in warnings ))
9999 self .assertTrue (any ("bundle pin mismatch for QuantPlatformKit" in warning for warning in warnings ))
100+ self .assertTrue (any ("missing exception metadata" in warning for warning in warnings ))
100101 self .assertEqual (notes [0 ], "qsl=" + str (repo_root / "qsl.toml" ))
101102
102103 def test_live_constraint_files_allow_full_sha_drift_from_bundle (self ):
103104 with tempfile .TemporaryDirectory () as workspace :
104105 compat_root = Path (workspace )
105106 self ._write_bundle (
106107 compat_root ,
107- "2026.07.1 " ,
108- {"QuantPlatformKit" : "a" * 40 },
108+ "2026.07.2 " ,
109+ {"QuantPlatformKit" : "37c81901160c5b31127a27dba1c63944933fb6bf" },
109110 )
110111 repo_root = self ._make_repo_root (
111112 qsl_toml = (
112113 'tier = "core"\n '
113114 "ring = 0\n "
114115 "allow_legacy = true\n "
115116 "[compat]\n "
116- 'bundle = "2026.07.1 "\n '
117+ 'bundle = "2026.07.2 "\n '
117118 'live_constraint_files = ["constraints.txt"]\n '
118119 ),
119120 pyproject = "" ,
@@ -136,16 +137,16 @@ def test_live_constraint_files_still_block_short_refs(self):
136137 compat_root = Path (workspace )
137138 self ._write_bundle (
138139 compat_root ,
139- "2026.07.1 " ,
140- {"QuantPlatformKit" : "a" * 40 },
140+ "2026.07.2 " ,
141+ {"QuantPlatformKit" : "37c81901160c5b31127a27dba1c63944933fb6bf" },
141142 )
142143 repo_root = self ._make_repo_root (
143144 qsl_toml = (
144145 'tier = "core"\n '
145146 "ring = 0\n "
146147 "allow_legacy = true\n "
147148 "[compat]\n "
148- 'bundle = "2026.07.1 "\n '
149+ 'bundle = "2026.07.2 "\n '
149150 'live_constraint_files = ["constraints.txt"]\n '
150151 ),
151152 pyproject = "" ,
@@ -162,22 +163,57 @@ def test_live_constraint_files_still_block_short_refs(self):
162163 self .assertIn ("forbidden short/invalid ref 'abc123'" , issues [0 ])
163164 self .assertEqual (warnings , [])
164165
166+
167+ def test_not_enforced_bundle_exception_metadata_notes (self ):
168+ with tempfile .TemporaryDirectory () as workspace :
169+ compat_root = Path (workspace )
170+ self ._write_bundle (
171+ compat_root ,
172+ "2026.07.2" ,
173+ {"QuantPlatformKit" : "37c81901160c5b31127a27dba1c63944933fb6bf" },
174+ )
175+ repo_root = self ._make_repo_root (
176+ qsl_toml = (
177+ 'tier = "pipeline"\n '
178+ "ring = 2\n "
179+ 'owner = "pipeline-team"\n '
180+ 'expires_at = "2099-12-31"\n '
181+ 'next_action = "remove transition pin drift"\n '
182+ "[compat]\n "
183+ 'bundle = "2026.07.2"\n '
184+ "enforce_bundle = false\n "
185+ ),
186+ pyproject = "" ,
187+ )
188+
189+ ok , issues , warnings , notes = check_qsl_compat ._check (repo_root = repo_root , compat_root = compat_root )
190+
191+ self .assertTrue (ok )
192+ self .assertEqual (issues , [])
193+ self .assertEqual (warnings , [])
194+ self .assertIn ("owner=pipeline-team" , notes )
195+ self .assertIn ("expires_at=2099-12-31" , notes )
196+ self .assertIn ("next_action=remove transition pin drift" , notes )
197+
165198 def test_legacy_reason_suppresses_allowed_legacy_warning (self ):
166199 with tempfile .TemporaryDirectory () as workspace :
167200 compat_root = Path (workspace )
168201 self ._write_bundle (
169202 compat_root ,
170- "2026.07.1 " ,
171- {"QuantPlatformKit" : "a" * 40 },
203+ "2026.07.2 " ,
204+ {"QuantPlatformKit" : "37c81901160c5b31127a27dba1c63944933fb6bf" },
172205 )
173206 repo_root = self ._make_repo_root (
174207 qsl_toml = (
175208 'tier = "pipeline"\n '
176209 "ring = 2\n "
177210 "allow_legacy = true\n "
178211 'legacy_reason = "runtime deployment compatibility"\n '
212+ 'owner = "runtime-team"\n '
213+ 'expires_at = "2099-12-31"\n '
214+ 'next_action = "replace runtime deployment requirements"\n '
179215 "[compat]\n "
180- 'bundle = "2026.07.1 "\n '
216+ 'bundle = "2026.07.2 "\n '
181217 "enforce_bundle = false\n "
182218 ),
183219 pyproject = "" ,
0 commit comments