sourcecode 5.9.6__py3-none-any.whl → 5.9.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of sourcecode might be problematic. Click here for more details.
- sourcecode/__init__.py +1 -1
- sourcecode/_build_commit.py +3 -3
- sourcecode/_docs/DEFECT-LEDGER.md +30 -0
- sourcecode/_docs/USER_GUIDE.md +4 -4
- sourcecode/cli.py +16 -26
- sourcecode/git_checkout.py +1 -1
- sourcecode/intent_router.py +2 -1
- sourcecode/prepare_context.py +2 -2
- sourcecode/progress.py +32 -1
- sourcecode/spring_impact.py +2 -0
- sourcecode/timeline.py +1 -1
- {sourcecode-5.9.6.dist-info → sourcecode-5.9.7.dist-info}/METADATA +5 -5
- {sourcecode-5.9.6.dist-info → sourcecode-5.9.7.dist-info}/RECORD +17 -17
- {sourcecode-5.9.6.dist-info → sourcecode-5.9.7.dist-info}/WHEEL +0 -0
- {sourcecode-5.9.6.dist-info → sourcecode-5.9.7.dist-info}/entry_points.txt +0 -0
- {sourcecode-5.9.6.dist-info → sourcecode-5.9.7.dist-info}/licenses/LICENSE +0 -0
- {sourcecode-5.9.6.dist-info → sourcecode-5.9.7.dist-info}/licenses/NOTICE +0 -0
sourcecode/__init__.py
CHANGED
sourcecode/_build_commit.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"""Generated at build time by hatch_build.py. Do not edit (AUD-592-D04)."""
|
|
2
2
|
|
|
3
|
-
BUILD_COMMIT = '
|
|
4
|
-
CLOSURE_PROVENANCE = {'Window': {'commit': '', 'status': 'uncited'}, '`ASK-FIELD-01`': {'commit': '829f9fa', 'status': 'present'}, '`ASK-FIELD-02`': {'commit': '6a659fa', 'status': 'present'}, '`ASK-FIELD-03`': {'commit': '55b0d51', 'status': 'present'}, '`AUD-588-F05`': {'commit': '470e4a4', 'status': 'present'}, '`AUD-590-B01` / `B-01`, `F-01`': {'commit': '', 'status': 'uncited'}, '`AUD-590-B02` / `B-02`, `F-02`': {'commit': '', 'status': 'uncited'}, '`AUD-590-B03` / `B-03`, `F-03`': {'commit': '', 'status': 'uncited'}, '`AUD-590-B04` / `B-04`, `F-04`': {'commit': '', 'status': 'uncited'}, '`AUD-590-R01` / `R-01`': {'commit': '', 'status': 'uncited'}, '`AUD-591-A01` / `A-1`': {'commit': '', 'status': 'uncited'}, '`AUD-591-A02` / `A-2`, `A-4`': {'commit': '', 'status': 'uncited'}, '`AUD-591-A03` / `A-3`': {'commit': '', 'status': 'uncited'}, '`AUD-591-A05` / `A-5`': {'commit': '', 'status': 'uncited'}, '`AUD-591-A06` / `A-6`, `A-7`': {'commit': '', 'status': 'uncited'}, '`AUD-591-A08` / `A-8`': {'commit': '', 'status': 'uncited'}, '`AUD-591-A09` / `A-9`': {'commit': '', 'status': 'uncited'}, '`AUD-591-A10` / `A-10`': {'commit': '', 'status': 'uncited'}, '`AUD-592-A02` / `A-1` second half, `§12.5`': {'commit': '63f3d61', 'status': 'present'}, '`AUD-592-B01` / `B-8`': {'commit': '8329614', 'status': 'present'}, '`AUD-592-D01` / `D-1`': {'commit': '0f8e03f', 'status': 'present'}, '`AUD-592-D02` / `D-2`': {'commit': '1d3db4d', 'status': 'present'}, '`AUD-592-D03` / `D-3`': {'commit': 'f28fe40', 'status': 'present'}, '`AUD-592-R01` / `A-1`': {'commit': '216025f', 'status': 'present'}, '`AUD-592-R02` / `N-4`, reopens `AUD-513-N04`': {'commit': 'ec3050d', 'status': 'present'}, '`AUD-593-N01` / `N-01`': {'commit': 'dd6a706', 'status': 'present'}, '`AUD-593-N02` / `N-02`': {'commit': 'f539787', 'status': 'present'}, '`AUD-593-N03` / `N-03`': {'commit': '1dd0b1c', 'status': 'present'}, '`AUD-593-N05` / `N-05`': {'commit': 'aa89388', 'status': 'present'}, '`AUD-593-N06` / `N-06`': {'commit': 'aa584a6', 'status': 'present'}, '`AUD-594-N04` / `D-5`, disclosure half of `B-3`': {'commit': 'a0060b7', 'status': 'present'}, '`AUD-594-X01` / `A-1`, residual of `AUD-593-N03`': {'commit': 'dd222b9', 'status': 'present'}, '`AUD-594-X02` / `A-1` second half': {'commit': '1193937', 'status': 'present'}, '`AUD-594-X03` / `X-03`, residual of `AUD-593-N01`': {'commit': 'e89e8f0', 'status': 'present'}, '`AUD-594-X04`': {'commit': '05b8cc9', 'status': 'present'}, '`AUD-595-A02` / `N-5`, advisory half of `AUD-588-B11`': {'commit': '3e15227', 'status': 'present'}, '`AUD-595-A03` / `B-6` exit-code half': {'commit': 'ab7285f', 'status': 'present'}, '`AUD-595-A05`': {'commit': 'e0b3d10', 'status': 'present'}, '`AUD-595-A07`, narrow half of `AUD-592-A02`': {'commit': 'cc15177', 'status': 'present'}, '`AUD-595-B01` / §B': {'commit': 'b77a1ad', 'status': 'present'}, '`AUD-595-Q01`': {'commit': '91a6566', 'status': 'present'}, '`AUD-596-A01` / `ASK-DET-001`': {'commit': 'fa508b4', 'status': 'present'}, '`AUD-596-A02` / `ASK-SELF-001`': {'commit': '4dfadc8', 'status': 'present'}, '`AUD-596-A03` / `ASK-C1-001`': {'commit': 'bffa3a6', 'status': 'present'}, '`AUD-596-A04` / `ASK-UX-003` + `ASK-UX-004`': {'commit': 'f0aac3c', 'status': 'present'}, '`AUD-596-B01` / `B-01`, harder witness for `BUG-6`': {'commit': '567d09d', 'status': 'present'}, '`AUD-596-B02` / `B-02`, class residual of `R2`': {'commit': '', 'status': 'uncited'}, '`AUD-596-B03` / `B-03`': {'commit': 'a8cb814', 'status': 'present'}, '`AUD-596-B06` / `B-06`': {'commit': '8107927', 'status': 'present'}, '`AUD-596-B07` / `B-07`, class residual of `AUD-592-R02`': {'commit': 'e060485', 'status': 'present'}, '`AUD-596-B09` / `B-09`': {'commit': '5b8146c', 'status': 'present'}, '`AUD-596-B10` / `B-10`': {'commit': '5cb994d', 'status': 'present'}, '`AUD-596-B16` / `B-16`': {'commit': '1507f69', 'status': 'present'}, '`AUD-596-D01` / `B-13` + `B-14`': {'commit': '0b1bdf0', 'status': 'present'}, '`AUD-596-D02` / `B-08`, residual of `AUD-594-N04`': {'commit': 'e7f73c3', 'status': 'present'}, '`AUD-596-D03` / `ASK-AGT-001`': {'commit': '8c46967', 'status': 'present'}, '`AUD-596-D04` / `B-18`': {'commit': '040f027', 'status': 'present'}, '`AUD-596-D05` / `B-19`': {'commit': 'fd2bf68', 'status': 'present'}, '`AUD-596-D06` / `B-20`': {'commit': '784cd83', 'status': 'present'}, '`AUD-596-D07` / `B-17`, half refuted': {'commit': 'c3ff822', 'status': 'present'}, '`AUD-596-D08` / `B-22`, class residual of `AUD-591-A06`': {'commit': 'b396c6a', 'status': 'present'}, '`AUD-596-D09` / `B-23`, surviving half of `B26`': {'commit': 'fd3d63f', 'status': 'present'}, '`AUD-596-D10` / `B-29`': {'commit': '', 'status': 'uncited'}, '`AUD-596-D11` / `ASK-UX-005`': {'commit': 'f4b4f77', 'status': 'present'}, '`AUD-596-D12` — six hints that send the reader back to the error': {'commit': '498df44', 'status': 'present'}, '`AUD-596-D13` / `B-28`': {'commit': '1014c72', 'status': 'present'}, '`AUD-596-D14` / `B-15`, narrow half of `B20`': {'commit': '10f2827', 'status': 'present'}, '`AUD-596-R01` / `B-05`': {'commit': '', 'status': 'uncited'}, '`AUD-596-X01` / `ASK-GATE-001`, gating half of `B24`': {'commit': 'e59c655', 'status': 'present'}, '`AUD-596-X02` / `ASK-UX-001` + `ASK-UX-002` + `B-21`': {'commit': 'f6ebf50', 'status': 'present'}, '`AUD-597-A01` / `ASK-UX-001` + `N-01`': {'commit': 'f8cf061', 'status': 'present'}, '`AUD-597-A02` / `ASK-UX-008` + `ASK-DOC-002`': {'commit': '9d47a4c', 'status': 'present'}, '`AUD-597-A03` / `ASK-DET-001`': {'commit': '4c7622a', 'status': 'present'}, '`AUD-597-A04` / `ASK-LEDGER-001`': {'commit': '46fb870', 'status': 'present'}, '`AUD-597-D01` / `B-04`': {'commit': '1094e6a', 'status': 'present'}, '`AUD-597-D02` / `ASK-DOC-001`': {'commit': 'ecb1bb7', 'status': 'present'}, '`AUD-597-D03` / `N-06`': {'commit': '9784333', 'status': 'present'}, '`AUD-597-D04` / `N-05`': {'commit': 'e51c087', 'status': 'present'}, '`AUD-597-D05` / `N-04`, fourth appearance of `C4-27`': {'commit': '9cccc15', 'status': 'present'}, '`AUD-597-D06` / `ASK-CLI-001`': {'commit': '178aa6d', 'status': 'present'}, '`AUD-597-D07` / `N-03`': {'commit': '9245e35', 'status': 'present'}, '`AUD-597-R01` / `ASK-PERF-001`': {'commit': '6910054', 'status': 'present'}, '`AUD-597-R02` / `ASK-ENC-001`': {'commit': 'ce6dac1', 'status': 'present'}, '`AUD-597-R03` / `ASK-UX-002`': {'commit': 'c57e50b', 'status': 'present'}, '`AUD-597-X01` / `ASK-BUILD-001` + `ASK-META-001` / `B-12`': {'commit': '354338b', 'status': 'present'}, '`AUD-598-B01` / `ASK-META-001`': {'commit': 'b2f7c65', 'status': 'present'}, '`AUD-598-B02` / `ASK-UX-002`': {'commit': '56a4bf7', 'status': 'present'}, '`AUD-598-B03` / `B-11`': {'commit': 'c63cb24', 'status': 'present'}, '`AUD-598-B04` / `N-02`': {'commit': '187937f', 'status': 'present'}, '`AUD-598-R01` / `ASK-PERF-002`': {'commit': '', 'status': 'uncited'}, '`AUD-598-X01` / `N-01` + `B-13` + `B-14` + `B-29` + `N-06`': {'commit': '6f2f5a4', 'status': 'present'}, '`AUD-600-B01` / `P-01`': {'commit': '366ffed', 'status': 'present'}, '`AUD-600-B02` / `P-02` + `ASK-PACK-002`': {'commit': '2a814c3', 'status': 'present'}, '`AUD-600-B03` / `ASK-PACK-001`': {'commit': '452f2a0', 'status': 'present'}, '`AUD-600-D01`': {'commit': '1224e1b', 'status': 'present'}, '`AUD-600-D02`': {'commit': 'eab8172', 'status': 'present'}, '`AUD-600-R01` / `R-01`': {'commit': '88add64', 'status': 'present'}, '`AUD-601-B01` / `N-02`, 5th round': {'commit': '', 'status': 'uncited'}, '`AUD-601-B02` / `ASK-PACK-004`': {'commit': '', 'status': 'uncited'}, '`AUD-601-D01` / `N-01`, `ASK-UX-001`, 5th round': {'commit': '', 'status': 'uncited'}, '`AUD-601-D02` / `B-13`, `B-14`, 5th round': {'commit': '', 'status': 'uncited'}, '`AUD-601-M01` / `B-26`, `B-27` retracted': {'commit': '', 'status': 'uncited'}, '`AUD-601-R01` / `R-02`': {'commit': '', 'status': 'uncited'}, '`B-3`': {'commit': '773268d', 'status': 'present'}, '`B-6`': {'commit': '17c6e06', 'status': 'present'}, '`B-8`': {'commit': '8329614', 'status': 'present'}, '`BUG-3` / `443b345`': {'commit': '', 'status': 'uncited'}, '`BUG-4a` / `AUD-588-B11` residual': {'commit': '24b4185', 'status': 'present'}, '`BUG-4b` / `AUD-588-B11` residual': {'commit': '0376350', 'status': 'present'}, '`E-39`, class residual of `AUD-593-N06`': {'commit': '25fc11f', 'status': 'present'}, '`N-5`': {'commit': 'c68083f', 'status': 'present'}, '`N-7`': {'commit': '082e9de', 'status': 'present'}, '`R-1`': {'commit': '424fb1c', 'status': 'present'}, '`R-2`': {'commit': '5158b92', 'status': 'present'}, '`R-3`': {'commit': '88aec04', 'status': 'present'}, '`R-4`': {'commit': '04fd04f', 'status': 'present'}}
|
|
5
|
-
CLOSURE_COVERAGE = {'closed_rows':
|
|
3
|
+
BUILD_COMMIT = 'ba9b9e9f310b129eb400a4c6e82b4d21f52366b8'
|
|
4
|
+
CLOSURE_PROVENANCE = {'AUD-611-B05': {'commit': '', 'status': 'uncited'}, 'AUD-611-B06': {'commit': '', 'status': 'uncited'}, 'AUD-611-B07': {'commit': '', 'status': 'uncited'}, 'AUD-611-B08': {'commit': '', 'status': 'uncited'}, 'AUD-611-B09': {'commit': '', 'status': 'uncited'}, 'AUD-611-B10': {'commit': '', 'status': 'uncited'}, 'AUD-611-B11': {'commit': '', 'status': 'uncited'}, 'Window': {'commit': '', 'status': 'uncited'}, '`ASK-FIELD-01`': {'commit': '829f9fa', 'status': 'present'}, '`ASK-FIELD-02`': {'commit': '6a659fa', 'status': 'present'}, '`ASK-FIELD-03`': {'commit': '55b0d51', 'status': 'present'}, '`AUD-588-F05`': {'commit': '470e4a4', 'status': 'present'}, '`AUD-590-B01` / `B-01`, `F-01`': {'commit': '', 'status': 'uncited'}, '`AUD-590-B02` / `B-02`, `F-02`': {'commit': '', 'status': 'uncited'}, '`AUD-590-B03` / `B-03`, `F-03`': {'commit': '', 'status': 'uncited'}, '`AUD-590-B04` / `B-04`, `F-04`': {'commit': '', 'status': 'uncited'}, '`AUD-590-R01` / `R-01`': {'commit': '', 'status': 'uncited'}, '`AUD-591-A01` / `A-1`': {'commit': '', 'status': 'uncited'}, '`AUD-591-A02` / `A-2`, `A-4`': {'commit': '', 'status': 'uncited'}, '`AUD-591-A03` / `A-3`': {'commit': '', 'status': 'uncited'}, '`AUD-591-A05` / `A-5`': {'commit': '', 'status': 'uncited'}, '`AUD-591-A06` / `A-6`, `A-7`': {'commit': '', 'status': 'uncited'}, '`AUD-591-A08` / `A-8`': {'commit': '', 'status': 'uncited'}, '`AUD-591-A09` / `A-9`': {'commit': '', 'status': 'uncited'}, '`AUD-591-A10` / `A-10`': {'commit': '', 'status': 'uncited'}, '`AUD-592-A02` / `A-1` second half, `§12.5`': {'commit': '63f3d61', 'status': 'present'}, '`AUD-592-B01` / `B-8`': {'commit': '8329614', 'status': 'present'}, '`AUD-592-D01` / `D-1`': {'commit': '0f8e03f', 'status': 'present'}, '`AUD-592-D02` / `D-2`': {'commit': '1d3db4d', 'status': 'present'}, '`AUD-592-D03` / `D-3`': {'commit': 'f28fe40', 'status': 'present'}, '`AUD-592-R01` / `A-1`': {'commit': '216025f', 'status': 'present'}, '`AUD-592-R02` / `N-4`, reopens `AUD-513-N04`': {'commit': 'ec3050d', 'status': 'present'}, '`AUD-593-N01` / `N-01`': {'commit': 'dd6a706', 'status': 'present'}, '`AUD-593-N02` / `N-02`': {'commit': 'f539787', 'status': 'present'}, '`AUD-593-N03` / `N-03`': {'commit': '1dd0b1c', 'status': 'present'}, '`AUD-593-N05` / `N-05`': {'commit': 'aa89388', 'status': 'present'}, '`AUD-593-N06` / `N-06`': {'commit': 'aa584a6', 'status': 'present'}, '`AUD-594-N04` / `D-5`, disclosure half of `B-3`': {'commit': 'a0060b7', 'status': 'present'}, '`AUD-594-X01` / `A-1`, residual of `AUD-593-N03`': {'commit': 'dd222b9', 'status': 'present'}, '`AUD-594-X02` / `A-1` second half': {'commit': '1193937', 'status': 'present'}, '`AUD-594-X03` / `X-03`, residual of `AUD-593-N01`': {'commit': 'e89e8f0', 'status': 'present'}, '`AUD-594-X04`': {'commit': '05b8cc9', 'status': 'present'}, '`AUD-595-A02` / `N-5`, advisory half of `AUD-588-B11`': {'commit': '3e15227', 'status': 'present'}, '`AUD-595-A03` / `B-6` exit-code half': {'commit': 'ab7285f', 'status': 'present'}, '`AUD-595-A05`': {'commit': 'e0b3d10', 'status': 'present'}, '`AUD-595-A07`, narrow half of `AUD-592-A02`': {'commit': 'cc15177', 'status': 'present'}, '`AUD-595-B01` / §B': {'commit': 'b77a1ad', 'status': 'present'}, '`AUD-595-Q01`': {'commit': '91a6566', 'status': 'present'}, '`AUD-596-A01` / `ASK-DET-001`': {'commit': 'fa508b4', 'status': 'present'}, '`AUD-596-A02` / `ASK-SELF-001`': {'commit': '4dfadc8', 'status': 'present'}, '`AUD-596-A03` / `ASK-C1-001`': {'commit': 'bffa3a6', 'status': 'present'}, '`AUD-596-A04` / `ASK-UX-003` + `ASK-UX-004`': {'commit': 'f0aac3c', 'status': 'present'}, '`AUD-596-B01` / `B-01`, harder witness for `BUG-6`': {'commit': '567d09d', 'status': 'present'}, '`AUD-596-B02` / `B-02`, class residual of `R2`': {'commit': '', 'status': 'uncited'}, '`AUD-596-B03` / `B-03`': {'commit': 'a8cb814', 'status': 'present'}, '`AUD-596-B06` / `B-06`': {'commit': '8107927', 'status': 'present'}, '`AUD-596-B07` / `B-07`, class residual of `AUD-592-R02`': {'commit': 'e060485', 'status': 'present'}, '`AUD-596-B09` / `B-09`': {'commit': '5b8146c', 'status': 'present'}, '`AUD-596-B10` / `B-10`': {'commit': '5cb994d', 'status': 'present'}, '`AUD-596-B16` / `B-16`': {'commit': '1507f69', 'status': 'present'}, '`AUD-596-D01` / `B-13` + `B-14`': {'commit': '0b1bdf0', 'status': 'present'}, '`AUD-596-D02` / `B-08`, residual of `AUD-594-N04`': {'commit': 'e7f73c3', 'status': 'present'}, '`AUD-596-D03` / `ASK-AGT-001`': {'commit': '8c46967', 'status': 'present'}, '`AUD-596-D04` / `B-18`': {'commit': '040f027', 'status': 'present'}, '`AUD-596-D05` / `B-19`': {'commit': 'fd2bf68', 'status': 'present'}, '`AUD-596-D06` / `B-20`': {'commit': '784cd83', 'status': 'present'}, '`AUD-596-D07` / `B-17`, half refuted': {'commit': 'c3ff822', 'status': 'present'}, '`AUD-596-D08` / `B-22`, class residual of `AUD-591-A06`': {'commit': 'b396c6a', 'status': 'present'}, '`AUD-596-D09` / `B-23`, surviving half of `B26`': {'commit': 'fd3d63f', 'status': 'present'}, '`AUD-596-D10` / `B-29`': {'commit': '', 'status': 'uncited'}, '`AUD-596-D11` / `ASK-UX-005`': {'commit': 'f4b4f77', 'status': 'present'}, '`AUD-596-D12` — six hints that send the reader back to the error': {'commit': '498df44', 'status': 'present'}, '`AUD-596-D13` / `B-28`': {'commit': '1014c72', 'status': 'present'}, '`AUD-596-D14` / `B-15`, narrow half of `B20`': {'commit': '10f2827', 'status': 'present'}, '`AUD-596-R01` / `B-05`': {'commit': '', 'status': 'uncited'}, '`AUD-596-X01` / `ASK-GATE-001`, gating half of `B24`': {'commit': 'e59c655', 'status': 'present'}, '`AUD-596-X02` / `ASK-UX-001` + `ASK-UX-002` + `B-21`': {'commit': 'f6ebf50', 'status': 'present'}, '`AUD-597-A01` / `ASK-UX-001` + `N-01`': {'commit': 'f8cf061', 'status': 'present'}, '`AUD-597-A02` / `ASK-UX-008` + `ASK-DOC-002`': {'commit': '9d47a4c', 'status': 'present'}, '`AUD-597-A03` / `ASK-DET-001`': {'commit': '4c7622a', 'status': 'present'}, '`AUD-597-A04` / `ASK-LEDGER-001`': {'commit': '46fb870', 'status': 'present'}, '`AUD-597-D01` / `B-04`': {'commit': '1094e6a', 'status': 'present'}, '`AUD-597-D02` / `ASK-DOC-001`': {'commit': 'ecb1bb7', 'status': 'present'}, '`AUD-597-D03` / `N-06`': {'commit': '9784333', 'status': 'present'}, '`AUD-597-D04` / `N-05`': {'commit': 'e51c087', 'status': 'present'}, '`AUD-597-D05` / `N-04`, fourth appearance of `C4-27`': {'commit': '9cccc15', 'status': 'present'}, '`AUD-597-D06` / `ASK-CLI-001`': {'commit': '178aa6d', 'status': 'present'}, '`AUD-597-D07` / `N-03`': {'commit': '9245e35', 'status': 'present'}, '`AUD-597-R01` / `ASK-PERF-001`': {'commit': '6910054', 'status': 'present'}, '`AUD-597-R02` / `ASK-ENC-001`': {'commit': 'ce6dac1', 'status': 'present'}, '`AUD-597-R03` / `ASK-UX-002`': {'commit': 'c57e50b', 'status': 'present'}, '`AUD-597-X01` / `ASK-BUILD-001` + `ASK-META-001` / `B-12`': {'commit': '354338b', 'status': 'present'}, '`AUD-598-B01` / `ASK-META-001`': {'commit': 'b2f7c65', 'status': 'present'}, '`AUD-598-B02` / `ASK-UX-002`': {'commit': '56a4bf7', 'status': 'present'}, '`AUD-598-B03` / `B-11`': {'commit': 'c63cb24', 'status': 'present'}, '`AUD-598-B04` / `N-02`': {'commit': '187937f', 'status': 'present'}, '`AUD-598-R01` / `ASK-PERF-002`': {'commit': '', 'status': 'uncited'}, '`AUD-598-X01` / `N-01` + `B-13` + `B-14` + `B-29` + `N-06`': {'commit': '6f2f5a4', 'status': 'present'}, '`AUD-600-B01` / `P-01`': {'commit': '366ffed', 'status': 'present'}, '`AUD-600-B02` / `P-02` + `ASK-PACK-002`': {'commit': '2a814c3', 'status': 'present'}, '`AUD-600-B03` / `ASK-PACK-001`': {'commit': '452f2a0', 'status': 'present'}, '`AUD-600-D01`': {'commit': '1224e1b', 'status': 'present'}, '`AUD-600-D02`': {'commit': 'eab8172', 'status': 'present'}, '`AUD-600-R01` / `R-01`': {'commit': '88add64', 'status': 'present'}, '`AUD-601-B01` / `N-02`, 5th round': {'commit': '', 'status': 'uncited'}, '`AUD-601-B02` / `ASK-PACK-004`': {'commit': '', 'status': 'uncited'}, '`AUD-601-D01` / `N-01`, `ASK-UX-001`, 5th round': {'commit': '', 'status': 'uncited'}, '`AUD-601-D02` / `B-13`, `B-14`, 5th round': {'commit': '', 'status': 'uncited'}, '`AUD-601-M01` / `B-26`, `B-27` retracted': {'commit': '', 'status': 'uncited'}, '`AUD-601-R01` / `R-02`': {'commit': '', 'status': 'uncited'}, '`B-3`': {'commit': '773268d', 'status': 'present'}, '`B-6`': {'commit': '17c6e06', 'status': 'present'}, '`B-8`': {'commit': '8329614', 'status': 'present'}, '`BUG-3` / `443b345`': {'commit': '', 'status': 'uncited'}, '`BUG-4a` / `AUD-588-B11` residual': {'commit': '24b4185', 'status': 'present'}, '`BUG-4b` / `AUD-588-B11` residual': {'commit': '0376350', 'status': 'present'}, '`E-39`, class residual of `AUD-593-N06`': {'commit': '25fc11f', 'status': 'present'}, '`N-5`': {'commit': 'c68083f', 'status': 'present'}, '`N-7`': {'commit': '082e9de', 'status': 'present'}, '`R-1`': {'commit': '424fb1c', 'status': 'present'}, '`R-2`': {'commit': '5158b92', 'status': 'present'}, '`R-3`': {'commit': '88aec04', 'status': 'present'}, '`R-4`': {'commit': '04fd04f', 'status': 'present'}}
|
|
5
|
+
CLOSURE_COVERAGE = {'closed_rows': 123, 'present': 91, 'absent': 0, 'unresolved': 0, 'uncited': 32, 'unknown': 0}
|
|
@@ -41,6 +41,36 @@ polyglot repository. It also did not open zero endpoints, minimum token-budget
|
|
|
41
41
|
refusal, unsupported `explain --compact`, or contractless `verify`: each matched
|
|
42
42
|
the declared contract and non-coverage in the observed run.
|
|
43
43
|
|
|
44
|
+
**External audit intake AUD-611, re-audit of release 5.9.6 — 2026-08-27.**
|
|
45
|
+
The external scope was restricted to repositories under Documents/workspace/testing
|
|
46
|
+
and covered about 250 real invocations across seven forks, with 104/104 CLI
|
|
47
|
+
commands exercised. The auditor reports zero target-repository writes, commits
|
|
48
|
+
or dirty worktrees. The final score was 7.4/10; an earlier interim pass recorded
|
|
49
|
+
8/10, so 7.4/10 is the governing result.
|
|
50
|
+
|
|
51
|
+
The three TeaVM field fixes are confirmed across eight or more control
|
|
52
|
+
repositories with no regressions. The new and still-relevant queue is:
|
|
53
|
+
|
|
54
|
+
| ID | Severity | Status | Evidence / closure boundary |
|
|
55
|
+
|---|---:|---|---|
|
|
56
|
+
| AUD-611-B01 | Critical | open | With stdout redirected to /dev/null, an invalid invocation returned exit 0 and empty stderr in 5/5 runs; normal files, pipes and command substitution retained exit 1. Scope is currently INVALID_INPUT only. Fix error transport and exit status independently, then test every error class and redirection form. |
|
|
57
|
+
| AUD-611-B02 | Critical | open | tutorials has 24,073 Java files; cold root compact ran 240.092 seconds, ended with external timeout exit 124 and zero stdout/stderr. CPU was active, so deadlock versus extreme analysis cost is unresolved. Reproduce on supported Windows/Git Bash and POSIX environments, add progress/deadline/partial diagnostics and define a scale contract. |
|
|
58
|
+
| AUD-611-B03 | High | open | Root compact/agent YAML took 85-380 seconds and reported served_from_cache false on repeated unchanged runs. Add a format/view cache regression and publish latency expectations. |
|
|
59
|
+
| AUD-611-B04 | High | open | One selftest hang occurred in about 16 aggregate runs. Other suspected hangs were retracted after adequate-timeout reruns. Add phase correlation, bounded execution and structured timeout failure. |
|
|
60
|
+
| AUD-611-B05 | High | closed | Root help now exposes all 22 accepted functional flags. Dedicated parity coverage and a real TeaVM execution of `--tree --compact` pass; future internal-only options must be explicitly deprecated or hidden. |
|
|
61
|
+
| AUD-611-B06 | Medium | closed | `pr-risk --files -` now rejects an empty list with the same `INVALID_INPUT` stderr envelope and `exit 1` as `pr-impact`; dedicated TeaVM regression passes. No-diff behavior from implicit Git sources remains separately scoped. |
|
|
62
|
+
| AUD-611-B07 | Medium | closed | Shared Git-ref failures now publish canonical `GIT_REF_NOT_FOUND`; TeaVM regressions cover delta and contract-diff, and existing ref consumers were aligned. |
|
|
63
|
+
| AUD-611-B08 | Medium | closed | `cold-start --compact` now qualifies its size as snapshot-dependent instead of claiming `~10K`; the TeaVM no-RIS path and compact identity regressions pass. A hard ceiling remains an optional future product requirement. |
|
|
64
|
+
| AUD-611-B09 | Medium-high | closed | Non-interactive long runs now emit one delayed stderr warning after 60 seconds by default, configurable with `ASK_PROGRESS_WARNING_SECONDS`; short runs remain silent. TeaVM stdout JSON remains valid under the regression. |
|
|
65
|
+
| AUD-611-B10 | Medium | closed | Added the missing `which endpoints have no security` anchor for `security-surface`; natural TeaVM resolution succeeds without scanning, while equal security-intent questions still refuse deterministically. |
|
|
66
|
+
| AUD-611-B11 | Medium | closed | Missing-symbol `impact-chain` results now use `risk_score: null` and `risk_score_raw: null`, matching `impact`'s unscored semantics; both TeaVM command paths return `not_found`, `unknown`, and `exit 1`. |
|
|
67
|
+
| AUD-611-B12 | Medium | open | Compact endpoint omission now carries explicit `population_total` and an inline measured-population note; the JUnit4 project-type classification half remains open. |
|
|
68
|
+
| AUD-611-B13 | Medium | investigation | retrieve endpoint-security failed silently once in 15 runs (6.7%), exit 1 and zero bytes. Add phase/correlation capture and repeated/concurrent reproduction before closure. |
|
|
69
|
+
|
|
70
|
+
Commercially, the audit supports normal repositories up to several thousand
|
|
71
|
+
files and keeps a provisional $35-50/developer/month range, but B01/B02 block
|
|
72
|
+
annual-grade reliability and enterprise-scale positioning until resolved.
|
|
73
|
+
|
|
44
74
|
**External audit intake `AUD-610`, release 5.9.3 — 2026-08-27.** The attached
|
|
45
75
|
report scored the build **7.2/10** after five parallel batches and approximately
|
|
46
76
|
120 invocations. It verified a clean target repository, no Java-file changes,
|
sourcecode/_docs/USER_GUIDE.md
CHANGED
|
@@ -46,16 +46,16 @@ CLI commands — impact, endpoints, spring-audit, explain, … each a pro
|
|
|
46
46
|
The key idea: the extraction is **content-addressed**. Commands reuse the parse cache and,
|
|
47
47
|
where their analysed scope matches, the shared Canonical IR; `ask cache model` names what a
|
|
48
48
|
warm buys for each command rather than implying that every projection costs the same. In
|
|
49
|
-
5.9.
|
|
49
|
+
5.9.7, `validation` enters through that shared CIR and `data-exposure` reuses one semantic
|
|
50
50
|
model across all declared label seeds. (The extraction and consumption contract is fixed in
|
|
51
51
|
the architecture ADRs 0001–0004 under `docs/architecture/`.)
|
|
52
52
|
|
|
53
53
|
The current external pack audit intake is tracked in
|
|
54
54
|
[`AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md`](AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md);
|
|
55
|
-
the two pack fixes are included in release 5.9.
|
|
55
|
+
the two pack fixes are included in release 5.9.7, with release-artifact verification
|
|
56
56
|
remaining for detached execution and pack evidence.
|
|
57
57
|
|
|
58
|
-
### Reliability contracts in 5.9.
|
|
58
|
+
### Reliability contracts in 5.9.7
|
|
59
59
|
|
|
60
60
|
Invalid analysis inputs fail before expensive work and use the structured
|
|
61
61
|
`INVALID_INPUT` envelope: a missing `--consumer` repository, a malformed CVE
|
|
@@ -236,7 +236,7 @@ pipx install sourcecode # isolated install, no venv needed
|
|
|
236
236
|
|
|
237
237
|
# Verify
|
|
238
238
|
ask version
|
|
239
|
-
# ask 5.9.
|
|
239
|
+
# ask 5.9.7
|
|
240
240
|
```
|
|
241
241
|
|
|
242
242
|
Requires Python 3.9+.
|
sourcecode/cli.py
CHANGED
|
@@ -5008,39 +5008,33 @@ def main(
|
|
|
5008
5008
|
dependencies: bool = typer.Option(
|
|
5009
5009
|
False,
|
|
5010
5010
|
"--dependencies",
|
|
5011
|
-
hidden=True,
|
|
5012
5011
|
help="Analyze direct dependencies from manifests and lockfiles. " + _IMPLIED_NOTE,
|
|
5013
5012
|
),
|
|
5014
5013
|
graph_modules: bool = typer.Option(
|
|
5015
5014
|
False,
|
|
5016
5015
|
"--graph-modules",
|
|
5017
|
-
hidden=True,
|
|
5018
5016
|
help="Include a structural module graph in output.",
|
|
5019
5017
|
),
|
|
5020
5018
|
graph_detail: str = typer.Option(
|
|
5021
5019
|
"high",
|
|
5022
5020
|
"--graph-detail",
|
|
5023
|
-
hidden=True,
|
|
5024
5021
|
help="Detail level for --graph-modules: high, medium, full.",
|
|
5025
5022
|
show_default=True,
|
|
5026
5023
|
),
|
|
5027
5024
|
max_nodes: Optional[int] = typer.Option(
|
|
5028
5025
|
None,
|
|
5029
5026
|
"--max-nodes",
|
|
5030
|
-
hidden=True,
|
|
5031
5027
|
help="Maximum nodes in --graph-modules output.",
|
|
5032
5028
|
min=1,
|
|
5033
5029
|
),
|
|
5034
5030
|
graph_edges: Optional[str] = typer.Option(
|
|
5035
5031
|
None,
|
|
5036
5032
|
"--graph-edges",
|
|
5037
|
-
hidden=True,
|
|
5038
5033
|
help="Edge types for --graph-modules, comma-separated: imports,calls,contains,extends.",
|
|
5039
5034
|
),
|
|
5040
5035
|
tree: bool = typer.Option(
|
|
5041
5036
|
False,
|
|
5042
5037
|
"--tree",
|
|
5043
|
-
hidden=True,
|
|
5044
5038
|
help="Include the full file_tree and flat file_paths list in output.",
|
|
5045
5039
|
),
|
|
5046
5040
|
no_redact: bool = typer.Option(
|
|
@@ -5066,32 +5060,27 @@ def main(
|
|
|
5066
5060
|
docs: bool = typer.Option(
|
|
5067
5061
|
False,
|
|
5068
5062
|
"--docs",
|
|
5069
|
-
hidden=True,
|
|
5070
5063
|
help="Extract documentation: docstrings, function signatures, and module-level comments.",
|
|
5071
5064
|
),
|
|
5072
5065
|
docs_depth: str = typer.Option(
|
|
5073
5066
|
"symbols",
|
|
5074
5067
|
"--docs-depth",
|
|
5075
|
-
hidden=True,
|
|
5076
5068
|
help="Documentation extraction depth: module, symbols, full.",
|
|
5077
5069
|
show_default=True,
|
|
5078
5070
|
),
|
|
5079
5071
|
full_metrics: bool = typer.Option(
|
|
5080
5072
|
False,
|
|
5081
5073
|
"--full-metrics",
|
|
5082
|
-
hidden=True,
|
|
5083
5074
|
help="Technical audit: LOC, complexity, test coverage per file.",
|
|
5084
5075
|
),
|
|
5085
5076
|
semantics: bool = typer.Option(
|
|
5086
5077
|
False,
|
|
5087
5078
|
"--semantics",
|
|
5088
|
-
hidden=True,
|
|
5089
5079
|
help="Cross-file symbol resolution and call graph analysis.",
|
|
5090
5080
|
),
|
|
5091
5081
|
architecture: bool = typer.Option(
|
|
5092
5082
|
False,
|
|
5093
5083
|
"--architecture",
|
|
5094
|
-
hidden=True,
|
|
5095
5084
|
help="Architectural layer inference (MVC/hexagonal/layered). " + _IMPLIED_NOTE,
|
|
5096
5085
|
),
|
|
5097
5086
|
git_context: bool = typer.Option(
|
|
@@ -5103,7 +5092,6 @@ def main(
|
|
|
5103
5092
|
git_depth: int = typer.Option(
|
|
5104
5093
|
20,
|
|
5105
5094
|
"--git-depth",
|
|
5106
|
-
hidden=True,
|
|
5107
5095
|
help="Number of recent commits to include with --git-context (default: 20).",
|
|
5108
5096
|
min=1,
|
|
5109
5097
|
max=100,
|
|
@@ -5111,7 +5099,6 @@ def main(
|
|
|
5111
5099
|
git_days: int = typer.Option(
|
|
5112
5100
|
90,
|
|
5113
5101
|
"--git-days",
|
|
5114
|
-
hidden=True,
|
|
5115
5102
|
help="Time window in days for change hotspot detection (default: 90).",
|
|
5116
5103
|
min=1,
|
|
5117
5104
|
max=3650,
|
|
@@ -5127,7 +5114,6 @@ def main(
|
|
|
5127
5114
|
code_notes: bool = typer.Option(
|
|
5128
5115
|
False,
|
|
5129
5116
|
"--code-notes",
|
|
5130
|
-
hidden=True,
|
|
5131
5117
|
help=(
|
|
5132
5118
|
"Extract inline annotations: TODO, FIXME, HACK, DEPRECATED, ADRs. "
|
|
5133
5119
|
+ _IMPLIED_NOTE
|
|
@@ -5153,26 +5139,22 @@ def main(
|
|
|
5153
5139
|
trace_pipeline: bool = typer.Option(
|
|
5154
5140
|
False,
|
|
5155
5141
|
"--trace-pipeline",
|
|
5156
|
-
hidden=True,
|
|
5157
5142
|
help="Diagnostic: include full pipeline trace in output.",
|
|
5158
5143
|
),
|
|
5159
5144
|
mode: str = typer.Option(
|
|
5160
5145
|
"contract",
|
|
5161
5146
|
"--mode",
|
|
5162
|
-
hidden=True,
|
|
5163
5147
|
help="Output mode: contract (default) | standard | raw.",
|
|
5164
5148
|
),
|
|
5165
5149
|
max_symbols: Optional[int] = typer.Option(
|
|
5166
5150
|
None,
|
|
5167
5151
|
"--max-symbols",
|
|
5168
|
-
hidden=True,
|
|
5169
5152
|
help="Limit total exported semantic nodes across all file contracts.",
|
|
5170
5153
|
min=1,
|
|
5171
5154
|
),
|
|
5172
5155
|
entrypoints_only: bool = typer.Option(
|
|
5173
5156
|
False,
|
|
5174
5157
|
"--entrypoints-only",
|
|
5175
|
-
hidden=True,
|
|
5176
5158
|
help="Include only files with exported symbols or runtime entrypoints.",
|
|
5177
5159
|
),
|
|
5178
5160
|
changed_only: bool = typer.Option(
|
|
@@ -5183,25 +5165,21 @@ def main(
|
|
|
5183
5165
|
rank_by: str = typer.Option(
|
|
5184
5166
|
"relevance",
|
|
5185
5167
|
"--rank-by",
|
|
5186
|
-
hidden=True,
|
|
5187
5168
|
help="Contract ranking strategy: relevance (default) | centrality | git-churn.",
|
|
5188
5169
|
),
|
|
5189
5170
|
emit_graph: bool = typer.Option(
|
|
5190
5171
|
False,
|
|
5191
5172
|
"--emit-graph",
|
|
5192
|
-
hidden=True,
|
|
5193
5173
|
help="Include a compact dependency graph in contract output.",
|
|
5194
5174
|
),
|
|
5195
5175
|
symbol: Optional[str] = typer.Option(
|
|
5196
5176
|
None,
|
|
5197
5177
|
"--symbol",
|
|
5198
|
-
hidden=True,
|
|
5199
5178
|
help="Extract context for a specific symbol (Python/TS/JS only — not supported for Java).",
|
|
5200
5179
|
),
|
|
5201
5180
|
max_importers: int = typer.Option(
|
|
5202
5181
|
50,
|
|
5203
5182
|
"--max-importers",
|
|
5204
|
-
hidden=True,
|
|
5205
5183
|
help="Maximum importer files returned by --symbol (default: 50).",
|
|
5206
5184
|
min=1,
|
|
5207
5185
|
max=10000,
|
|
@@ -9156,12 +9134,15 @@ def endpoints_cmd(
|
|
|
9156
9134
|
data["endpoints"] = []
|
|
9157
9135
|
data["endpoints_note"] = (
|
|
9158
9136
|
f"The endpoints list is intentionally omitted by --compact; "
|
|
9159
|
-
f"{_listed} endpoint(s) were measured
|
|
9137
|
+
f"{data.get('total', _listed)} endpoint(s) were measured in the "
|
|
9138
|
+
f"selected population; {_listed} row(s) were present before omission. "
|
|
9139
|
+
"An empty `endpoints` list "
|
|
9160
9140
|
"does not mean that the repository has no endpoints. Re-run without "
|
|
9161
9141
|
"--compact or narrow the request to retrieve rows."
|
|
9162
9142
|
)
|
|
9163
9143
|
data["endpoints_omitted"] = {
|
|
9164
9144
|
"total": _listed,
|
|
9145
|
+
"population_total": data.get("total", _listed),
|
|
9165
9146
|
"shown": 0,
|
|
9166
9147
|
"omitted": _listed,
|
|
9167
9148
|
**cap_effect("display_list", limit=0, total=_listed),
|
|
@@ -17328,6 +17309,14 @@ def pr_risk_cmd(
|
|
|
17328
17309
|
changed: "list[str]" = []
|
|
17329
17310
|
if files is not None:
|
|
17330
17311
|
changed, _origin = _resolve_files_option(files, command="pr-risk")
|
|
17312
|
+
if not changed:
|
|
17313
|
+
_emit_error_json(
|
|
17314
|
+
INVALID_INPUT_CODE,
|
|
17315
|
+
f"--files '{_origin}' is empty.",
|
|
17316
|
+
hint="Provide at least one changed file path.",
|
|
17317
|
+
expected="One file path per line, or a comma-separated list.",
|
|
17318
|
+
)
|
|
17319
|
+
raise typer.Exit(code=1)
|
|
17331
17320
|
else:
|
|
17332
17321
|
# The same helper `pr-impact` uses, so one diff means one file set.
|
|
17333
17322
|
changed, _files_desc = _git_changed_files(target, since)
|
|
@@ -19335,7 +19324,7 @@ def cold_start_cmd(
|
|
|
19335
19324
|
compact: bool = typer.Option(
|
|
19336
19325
|
False,
|
|
19337
19326
|
"--compact",
|
|
19338
|
-
help="Emit a
|
|
19327
|
+
help="Emit a bounded orientation subset; size depends on the stored snapshot. It is not a fixed token ceiling.",
|
|
19339
19328
|
),
|
|
19340
19329
|
output_path: Optional[Path] = typer.Option(
|
|
19341
19330
|
None,
|
|
@@ -19357,8 +19346,9 @@ def cold_start_cmd(
|
|
|
19357
19346
|
|
|
19358
19347
|
\b
|
|
19359
19348
|
Note: Full output is large (~100K–200K tokens for medium repos).
|
|
19360
|
-
Use --compact for a
|
|
19361
|
-
|
|
19349
|
+
Use --compact for a bounded orientation subset; its size depends on the
|
|
19350
|
+
stored snapshot and it is not a fixed token ceiling. Use --output FILE to
|
|
19351
|
+
save the full snapshot for local search tools.
|
|
19362
19352
|
"""
|
|
19363
19353
|
import json as _json
|
|
19364
19354
|
from sourcecode.ris import get_cold_start_context as _gcs
|
sourcecode/git_checkout.py
CHANGED
|
@@ -34,7 +34,7 @@ from pathlib import Path
|
|
|
34
34
|
from typing import Iterator, Optional
|
|
35
35
|
|
|
36
36
|
#: Error code published when a ref does not resolve in this repository.
|
|
37
|
-
REF_NOT_FOUND = "
|
|
37
|
+
REF_NOT_FOUND = "GIT_REF_NOT_FOUND"
|
|
38
38
|
|
|
39
39
|
#: Error code published when the path given is not a git repository at all.
|
|
40
40
|
NOT_A_REPOSITORY = "not_a_git_repository"
|
sourcecode/intent_router.py
CHANGED
|
@@ -154,7 +154,8 @@ INTENT_VOCABULARY: "dict[str, tuple[str, ...]]" = {
|
|
|
154
154
|
),
|
|
155
155
|
"security-surface": (
|
|
156
156
|
"security surface", "what is exposed", "attack surface",
|
|
157
|
-
"which endpoints are unprotected", "
|
|
157
|
+
"which endpoints are unprotected", "which endpoints have no security",
|
|
158
|
+
"unsecured endpoints",
|
|
158
159
|
),
|
|
159
160
|
"validation-points": (
|
|
160
161
|
"validation points", "where is input validated", "input validation",
|
sourcecode/prepare_context.py
CHANGED
|
@@ -1346,7 +1346,7 @@ class TaskContextBuilder:
|
|
|
1346
1346
|
key_dependencies=[], code_notes_summary=None,
|
|
1347
1347
|
limitations=[], confidence="low",
|
|
1348
1348
|
since=since,
|
|
1349
|
-
error_code="
|
|
1349
|
+
error_code="GIT_REF_NOT_FOUND",
|
|
1350
1350
|
error_message=f"Base ref '{since}' not found in this repository.",
|
|
1351
1351
|
error_hints=_pr_hints,
|
|
1352
1352
|
gaps=[f"Cannot compute PR diff: git ref '{since}' not found."] + _pr_hints,
|
|
@@ -1730,7 +1730,7 @@ class TaskContextBuilder:
|
|
|
1730
1730
|
limitations=[],
|
|
1731
1731
|
confidence="low",
|
|
1732
1732
|
since=since,
|
|
1733
|
-
error_code="
|
|
1733
|
+
error_code="GIT_REF_NOT_FOUND",
|
|
1734
1734
|
error_message=f"Git reference '{since}' does not exist in this repository.",
|
|
1735
1735
|
error_hints=_hints,
|
|
1736
1736
|
gaps=[f"Cannot compute delta: git ref '{since}' not found."] + _hints,
|
sourcecode/progress.py
CHANGED
|
@@ -34,6 +34,7 @@ def _duration(seconds: float) -> str:
|
|
|
34
34
|
|
|
35
35
|
#: Consecutive failed heartbeat writes before the loop gives up on the stream.
|
|
36
36
|
_MAX_WRITE_FAILURES = 5
|
|
37
|
+
_DEFAULT_SLOW_RUN_WARNING_SECONDS = 60.0
|
|
37
38
|
|
|
38
39
|
# --- Completion registry ----------------------------------------------------
|
|
39
40
|
# Module state, not per-instance: the emitter of the answer (the CLI output
|
|
@@ -152,6 +153,14 @@ class Progress:
|
|
|
152
153
|
|
|
153
154
|
def __init__(self) -> None:
|
|
154
155
|
self._enabled = _terminal_capable()
|
|
156
|
+
self._slow_warning = not self._enabled and _progress_setting() not in _PROGRESS_OFF
|
|
157
|
+
try:
|
|
158
|
+
self._slow_warning_after = max(
|
|
159
|
+
1.0,
|
|
160
|
+
float(os.environ.get("ASK_PROGRESS_WARNING_SECONDS", str(_DEFAULT_SLOW_RUN_WARNING_SECONDS))),
|
|
161
|
+
)
|
|
162
|
+
except ValueError:
|
|
163
|
+
self._slow_warning_after = _DEFAULT_SLOW_RUN_WARNING_SECONDS
|
|
155
164
|
self._line_mode = self._enabled and (
|
|
156
165
|
bool(progress_file_path()) or not sys.stderr.isatty()
|
|
157
166
|
)
|
|
@@ -164,6 +173,8 @@ class Progress:
|
|
|
164
173
|
self._lock = threading.Lock()
|
|
165
174
|
self._stop_event = threading.Event()
|
|
166
175
|
self._thread: Optional[threading.Thread] = None
|
|
176
|
+
self._slow_warning_thread: Optional[threading.Thread] = None
|
|
177
|
+
self._slow_warning_emitted = False
|
|
167
178
|
self._stopped = False
|
|
168
179
|
self._done_printed = False
|
|
169
180
|
self._outputs_at_start = 0
|
|
@@ -213,6 +224,11 @@ class Progress:
|
|
|
213
224
|
with _registry_lock:
|
|
214
225
|
self._outputs_at_start = _output_events
|
|
215
226
|
if not self._enabled:
|
|
227
|
+
if self._slow_warning:
|
|
228
|
+
self._slow_warning_thread = threading.Thread(
|
|
229
|
+
target=self._slow_warning_loop, daemon=True
|
|
230
|
+
)
|
|
231
|
+
self._slow_warning_thread.start()
|
|
216
232
|
return self
|
|
217
233
|
self._stop_event.clear()
|
|
218
234
|
self._thread = threading.Thread(target=self._loop, daemon=True)
|
|
@@ -313,9 +329,11 @@ class Progress:
|
|
|
313
329
|
if self._stopped:
|
|
314
330
|
return elapsed
|
|
315
331
|
self._stopped = True
|
|
332
|
+
self._stop_event.set()
|
|
333
|
+
if self._slow_warning_thread:
|
|
334
|
+
self._slow_warning_thread.join(timeout=1.0)
|
|
316
335
|
if not self._enabled:
|
|
317
336
|
return elapsed
|
|
318
|
-
self._stop_event.set()
|
|
319
337
|
if self._thread:
|
|
320
338
|
self._thread.join(timeout=1.0)
|
|
321
339
|
if not self._line_mode:
|
|
@@ -502,3 +520,16 @@ class Progress:
|
|
|
502
520
|
if not self._emit(idx):
|
|
503
521
|
break
|
|
504
522
|
idx += 1
|
|
523
|
+
|
|
524
|
+
def _slow_warning_loop(self) -> None:
|
|
525
|
+
"""Give non-interactive supervisors a delayed liveness signal only."""
|
|
526
|
+
if self._stop_event.wait(timeout=self._slow_warning_after) or self._stopped:
|
|
527
|
+
return
|
|
528
|
+
try:
|
|
529
|
+
self._write(
|
|
530
|
+
f"[ask] warning: run has exceeded {_duration(self._slow_warning_after)}; "
|
|
531
|
+
"still working (set --progress stderr for periodic heartbeats)\n"
|
|
532
|
+
)
|
|
533
|
+
self._slow_warning_emitted = True
|
|
534
|
+
except Exception:
|
|
535
|
+
pass
|
sourcecode/spring_impact.py
CHANGED
|
@@ -1097,6 +1097,8 @@ class ImpactOrchestrator:
|
|
|
1097
1097
|
resolution="not_found",
|
|
1098
1098
|
analysis_warnings=warnings,
|
|
1099
1099
|
risk_level="unknown",
|
|
1100
|
+
risk_score=None,
|
|
1101
|
+
risk_score_raw=None,
|
|
1100
1102
|
confidence="low",
|
|
1101
1103
|
explanation=f"Symbol {symbol!r} not found in the IR.",
|
|
1102
1104
|
metadata={"analysis_depth": depth},
|
sourcecode/timeline.py
CHANGED
|
@@ -245,7 +245,7 @@ def commit_series(repo: Path, since: str, *, first_parent: bool = True) -> list[
|
|
|
245
245
|
result = _git(repo, *args)
|
|
246
246
|
if result.returncode != 0:
|
|
247
247
|
raise TimelineError(
|
|
248
|
-
"
|
|
248
|
+
"GIT_REF_NOT_FOUND",
|
|
249
249
|
f"{since!r} does not resolve in this repository, or has no path to HEAD.",
|
|
250
250
|
ref=since,
|
|
251
251
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 5.9.
|
|
3
|
+
Version: 5.9.7
|
|
4
4
|
Summary: Persistent structural context and ultra-fast repeated analysis for AI coding agents
|
|
5
5
|
Project-URL: Homepage, https://github.com/HarounDominique/sourcecode
|
|
6
6
|
Project-URL: Repository, https://github.com/HarounDominique/sourcecode
|
|
@@ -59,7 +59,7 @@ Description-Content-Type: text/markdown
|
|
|
59
59
|
> question. All analysis is local and deterministic; see [Privacy](#configuration--privacy)
|
|
60
60
|
> before inspecting a repository whose telemetry policy you need to control.
|
|
61
61
|
|
|
62
|
-

|
|
63
63
|

|
|
64
64
|
|
|
65
65
|
Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
|
|
@@ -196,7 +196,7 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
|
|
|
196
196
|
answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
|
|
197
197
|
unset, or set it to `0`, to disable the ceiling explicitly.
|
|
198
198
|
|
|
199
|
-
**Current performance status.** Release 5.9.
|
|
199
|
+
**Current performance status.** Release 5.9.7 retains the shared Canonical IR
|
|
200
200
|
path used by `validation` and now passes that same CIR into labelled `data-exposure`
|
|
201
201
|
runs; the no-label path remains parse-free. These are implementation properties,
|
|
202
202
|
not duration promises. A controlled external warm-path audit has opened performance
|
|
@@ -218,7 +218,7 @@ in `overlapping_paths`; a missing or non-directory path is rejected as structure
|
|
|
218
218
|
invalid input rather than treated as an empty repository. This prevents silent
|
|
219
219
|
entitlement errors in CI and does not change per-repository gates or billing.
|
|
220
220
|
|
|
221
|
-
Release 5.9.
|
|
221
|
+
Release 5.9.7 also hardens the boundary contracts: missing consumer repositories,
|
|
222
222
|
malformed CVE feeds and unresolved `pack gate --since` refs fail as structured
|
|
223
223
|
input errors; duplicate same-commit baselines are never overwritten. `posture
|
|
224
224
|
--diff` validates unknown profiles when the repository declares profiles. In
|
|
@@ -251,7 +251,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
251
251
|
# pip / pipx
|
|
252
252
|
pipx install sourcecode # or: pip install sourcecode
|
|
253
253
|
|
|
254
|
-
ask version # ask 5.9.
|
|
254
|
+
ask version # ask 5.9.7 — and, on a build that has aged,
|
|
255
255
|
# how many releases have probably shipped since
|
|
256
256
|
```
|
|
257
257
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
sourcecode/__init__.py,sha256=
|
|
1
|
+
sourcecode/__init__.py,sha256=gFKYhRgFEIRJQkCoClBu-R4CIT4KIDVnPAvdp9RZjgA,308
|
|
2
2
|
sourcecode/__main__.py,sha256=qDFVkobwsdZrX0B3stiRqsUNivVpybKO-egzAwCW4xw,165
|
|
3
|
-
sourcecode/_build_commit.py,sha256=
|
|
3
|
+
sourcecode/_build_commit.py,sha256=7TTq7KpgqFZyS9X9WdPvNJ9CJ5-afbJ6tFk_zAiwjzM,9290
|
|
4
4
|
sourcecode/access_drift.py,sha256=1R7_fiAPvKNOnxc9uxkH3JH-k8MiAuyE7FwWUX1r4Fg,8995
|
|
5
5
|
sourcecode/adaptive_scanner.py,sha256=yJBKjNpkY6bpueYJ2YnRezen3sYZDecEt7WaaNWdqug,9466
|
|
6
6
|
sourcecode/analysis_budget.py,sha256=ZuNEboPF8A6GK-_V7WNt92ezgriga7_Rbr-vvSN4UEE,4183
|
|
@@ -35,7 +35,7 @@ sourcecode/change_plan.py,sha256=drAoDsqFplutCLc6Y0xue7sYkTls0SpYh7aOXvttv3I,129
|
|
|
35
35
|
sourcecode/ci_output.py,sha256=X4NRokWWMRF9Ex8OQrEO2g04GzJ00GDP5zYIoqI9YCc,4625
|
|
36
36
|
sourcecode/cir_graphs.py,sha256=RytqSv1WF8kdlfXj2fPQz16LY4akS2kyThbdWL8beCQ,14835
|
|
37
37
|
sourcecode/classifier.py,sha256=JBzPwSSrDG-tUHAbcKB678HRbjLpD-ohzbzzO62mgpo,20114
|
|
38
|
-
sourcecode/cli.py,sha256=
|
|
38
|
+
sourcecode/cli.py,sha256=ULjbDXHGezsDnbdW2be3oci6LuXvHDNUwEmDMtyNL7M,938155
|
|
39
39
|
sourcecode/client_calls.py,sha256=YOPnfRZzRyqmdHvXSVeiunW8cuiuCuWXacNIQRgKMCw,22640
|
|
40
40
|
sourcecode/code_notes_analyzer.py,sha256=EJemNCNc9Dn-1RZYu-aNbK0ELzmsyC4s6FdHi3XyNEI,9392
|
|
41
41
|
sourcecode/compare.py,sha256=Lnfmm9I3k0H1jP1tV6ZJ-R7znjQPLPLCe5TzV1Jb_PM,15323
|
|
@@ -87,14 +87,14 @@ sourcecode/fqn_utils.py,sha256=XLU7zDkNBXz_RZkIUNfpPmp1nekWtqP-fxV92tDV1vg,2158
|
|
|
87
87
|
sourcecode/functional_routes.py,sha256=KXMrDoBwj_GC80w10FvgA3zddIGE1iW9KjpDtCllSSs,16813
|
|
88
88
|
sourcecode/gate_anchors.py,sha256=26v8wUtzOk1K1Un5uXdUxAu20mqSPX3jo82zuM05ByE,2066
|
|
89
89
|
sourcecode/git_analyzer.py,sha256=irvEwddbd5_tbA_eYUZebf4mH7_nFhpjwaWAV1f7jUY,15755
|
|
90
|
-
sourcecode/git_checkout.py,sha256=
|
|
90
|
+
sourcecode/git_checkout.py,sha256=Vnv2OERMa5lUHx57dmefvEMfOzu3f72_RPnLv9zEBuo,6009
|
|
91
91
|
sourcecode/github_diff.py,sha256=H1woYKuCjb6S9sofBPpMlOpn0L4LoVxuVP7ddnhsNaA,3848
|
|
92
92
|
sourcecode/graph_analyzer.py,sha256=Gw2MzLp0P990TGx6D6Ie-WIPnjWVE6X6dNBQnoM9xPU,65857
|
|
93
93
|
sourcecode/graph_evidence.py,sha256=rENNsYRZeNstX_ExNCLlbHJAruFQwxo5d00x6wO3xwI,15030
|
|
94
94
|
sourcecode/hibernate_strat.py,sha256=kLAa5GMwYFZgOI7edl-nDcJTr4SFVYAoxtMy-fj2BsA,77954
|
|
95
95
|
sourcecode/identity_fallback.py,sha256=uRC_j_80uaI4Ue4tf-OhKX4h472dmufYcjEFGSxY2jk,9190
|
|
96
96
|
sourcecode/integration_coordinates.py,sha256=rvuApnS7WdRUbeQLg_oKj-Gi0koO2RKdw6HenXNgrDo,12443
|
|
97
|
-
sourcecode/intent_router.py,sha256=
|
|
97
|
+
sourcecode/intent_router.py,sha256=hC_o0VYfSjzSXecFkpiD7vzFgvt44YAw6E_jrMeGiZ4,15555
|
|
98
98
|
sourcecode/jdk_exports.py,sha256=fCrlwNAXUT9gge_joq6kMnY3zJxYB2pxqy-0w3o3MJI,874
|
|
99
99
|
sourcecode/license.py,sha256=Rx_TXEztUJB9TzI352hEh8cmCd-30J9WS6iT4EndcW0,30974
|
|
100
100
|
sourcecode/manifest_cache.py,sha256=aPRHUs781d00fVbtlTiSaq0-AS9bAqS7_zJ0snZvlJs,2244
|
|
@@ -126,9 +126,9 @@ sourcecode/posture.py,sha256=OQX3r0wBzdRNwMs6fuJcpFKPuyoC_uAkAVoKsYuwqgE,87190
|
|
|
126
126
|
sourcecode/pr_comment_renderer.py,sha256=239PmJdf95av_ZW236C7_tvq_ahECeuF9AZxrheJ4OQ,15573
|
|
127
127
|
sourcecode/pr_impact.py,sha256=8RgTJgvEThezh-Vm65eiFvJBdb45VjcbewEk5P144-0,39184
|
|
128
128
|
sourcecode/pr_risk.py,sha256=Qbj1aK-JsdTQd_nji_-RaZAL3WUbwqDg9aH-cHQkoog,11354
|
|
129
|
-
sourcecode/prepare_context.py,sha256=
|
|
129
|
+
sourcecode/prepare_context.py,sha256=QsJiKoJRNn5_1adyBbKguH_wiaM8hpPLE0fLG9J4ilU,245016
|
|
130
130
|
sourcecode/product_info.py,sha256=rpuCDf0KM2SD-WP8vw2tjdcbhWPsOGEVjSWqS8fkzlo,4966
|
|
131
|
-
sourcecode/progress.py,sha256=
|
|
131
|
+
sourcecode/progress.py,sha256=frGEzCq-6gIQzPocrLyeEVLIzLmSnDauoX-3H6yE-3I,23054
|
|
132
132
|
sourcecode/provenance.py,sha256=gLbsLv0gze7k7ChM4i5M3MwKfFPzs8wzM72rUd2C5sM,7342
|
|
133
133
|
sourcecode/ranking_engine.py,sha256=ZAucq_YX2KkWUuAZf4P0lhtQ_38vEFnUhuGtSZd1S0E,12970
|
|
134
134
|
sourcecode/readiness_timeline.py,sha256=KjghC1MWH7Tzto97TBR3N0F8FkR87w5z7lZ1QsWvAQE,8506
|
|
@@ -177,7 +177,7 @@ sourcecode/servlet_surface.py,sha256=CeiebkxLXKojUQxIf7HV7tdQAwLM32ggDUwBnVQIjdo
|
|
|
177
177
|
sourcecode/source_text.py,sha256=R52gmSljz7L6YVPbixv5W-LOZ5eKUVvSUP3S-QH_IWc,9047
|
|
178
178
|
sourcecode/spring_event_topology.py,sha256=5_ON_21Le5zbG-1GRc5GLIi5HJfy_QjcXLVPC5WeUGQ,18055
|
|
179
179
|
sourcecode/spring_findings.py,sha256=U5gMDdSdhpJLstt3ghG4y5CCS9nzIU9NuRMHpNu7FpY,27766
|
|
180
|
-
sourcecode/spring_impact.py,sha256=
|
|
180
|
+
sourcecode/spring_impact.py,sha256=7gcP4MJcRl8SF5UjYnZXsvtwvIollUtYXlUn08q-JMM,98677
|
|
181
181
|
sourcecode/spring_model.py,sha256=MBUKR1tes5UVGxtYiv4J2WrydgOp_zReek7P7hO50hA,28962
|
|
182
182
|
sourcecode/spring_profiles.py,sha256=jDNBVhEZQAZXrpqt85FkP2URsMw4YWhQo3W3SLHuwpM,19617
|
|
183
183
|
sourcecode/spring_properties.py,sha256=kPTk5qAJxdbHc1hclhHAP0O-hCIzBn8PTh3lzl-I4a4,8400
|
|
@@ -190,7 +190,7 @@ sourcecode/target_admission.py,sha256=wFZ4pzlxhiF6Q6s2lEAZEzcCfj1Y6xNvujjt8MdO0Q
|
|
|
190
190
|
sourcecode/test_gap_ranking.py,sha256=hl-tTyQUXZGJycG1b6npbLeE_DaVHaOsvPwG9qqC5y8,15711
|
|
191
191
|
sourcecode/test_sources.py,sha256=MO6dYg5ogTN29n9G0-IbMqx8omCT23lkhQHbEze2p5M,9441
|
|
192
192
|
sourcecode/text_input.py,sha256=3pL8DxR_DMI3ece-B70DnppvrEaLh4R17Pp8dK9G_hc,3596
|
|
193
|
-
sourcecode/timeline.py,sha256=
|
|
193
|
+
sourcecode/timeline.py,sha256=d6LttvP7FXUx_FskB3mtb6o5xJnCnP3S9dlbj8-f8cY,22284
|
|
194
194
|
sourcecode/timeline_cache.py,sha256=99RQ-MW3wqxjtuHcVB_k83USsxWP6DqzeupfSzKR_CE,8277
|
|
195
195
|
sourcecode/token_estimate.py,sha256=_2cworfPkfP2ZxVcwX_Ltu0vFdMvK-FMuTY3qJAqI5M,9415
|
|
196
196
|
sourcecode/tree_utils.py,sha256=oAwkGyrixO2VMX4ZMIDzg9V2oBxt3KIxFN3ahVMxKJo,2174
|
|
@@ -273,13 +273,13 @@ sourcecode/telemetry/consent.py,sha256=-Wb8BFGXEexOs8M0Eja7F-T6ZtLNPeRoZnHcHvlP7
|
|
|
273
273
|
sourcecode/telemetry/events.py,sha256=l3Z2SQUO4_C2D2ItXOOdVNimAmHedUHnUxqYFTxnsAE,2900
|
|
274
274
|
sourcecode/telemetry/filters.py,sha256=-lqT2oorECuqEIdeHb--7AZ6BCaUx0bya720a-Z5x6w,7335
|
|
275
275
|
sourcecode/telemetry/transport.py,sha256=4gGHsq0WeY9VywEZXA3vUxykfiYnw9uuqfjAAec7F8o,1681
|
|
276
|
-
sourcecode/_docs/DEFECT-LEDGER.md,sha256=
|
|
276
|
+
sourcecode/_docs/DEFECT-LEDGER.md,sha256=ln-d2Sw8RWXfqWZoJLGmBl3AceG4wPEDPpNhVQEdlgg,1123683
|
|
277
277
|
sourcecode/_docs/LICENSE,sha256=23-fk61oSWGVmkWyka-FIM0rhAPM2hcYHnsaridL8Uo,1859
|
|
278
278
|
sourcecode/_docs/NOTICE,sha256=Br-AA8Y3iJo1WXa5uP8QBpzqI5nDu3iGLbFyvDt3BOs,321
|
|
279
|
-
sourcecode/_docs/USER_GUIDE.md,sha256=
|
|
280
|
-
sourcecode-5.9.
|
|
281
|
-
sourcecode-5.9.
|
|
282
|
-
sourcecode-5.9.
|
|
283
|
-
sourcecode-5.9.
|
|
284
|
-
sourcecode-5.9.
|
|
285
|
-
sourcecode-5.9.
|
|
279
|
+
sourcecode/_docs/USER_GUIDE.md,sha256=K9kO1AzIBfwpM3U02sBPPQuyBIA6GU3UBBO0OojgpgI,104721
|
|
280
|
+
sourcecode-5.9.7.dist-info/METADATA,sha256=rnWzcNS9xiYtpYSTsxzwRh4J7KuUGqsXWi9MPhgKmH8,64752
|
|
281
|
+
sourcecode-5.9.7.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
|
|
282
|
+
sourcecode-5.9.7.dist-info/entry_points.txt,sha256=-JEAdChrK5We51kZcb7OaDcyil-dHBjBPL-NhuO-QY8,89
|
|
283
|
+
sourcecode-5.9.7.dist-info/licenses/LICENSE,sha256=23-fk61oSWGVmkWyka-FIM0rhAPM2hcYHnsaridL8Uo,1859
|
|
284
|
+
sourcecode-5.9.7.dist-info/licenses/NOTICE,sha256=Br-AA8Y3iJo1WXa5uP8QBpzqI5nDu3iGLbFyvDt3BOs,321
|
|
285
|
+
sourcecode-5.9.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|