sdr-visualizer 1.2.3__tar.gz → 1.2.4__tar.gz

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.
Files changed (181) hide show
  1. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/CHANGELOG.md +15 -1
  2. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/PKG-INFO +1 -1
  3. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/docs/PRODUCT_CONTRACT.md +2 -2
  4. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/docs/RELEASE_EVIDENCE_TEMPLATE.md +17 -6
  5. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/docs/RELEASING.md +38 -5
  6. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/pyproject.toml +1 -1
  7. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/__init__.py +1 -1
  8. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/adapters/aa.py +1 -1
  9. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/adapters/cja.py +1 -1
  10. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/render/templates/cja_lineage.html.j2 +1 -1
  11. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_cli.py +30 -0
  12. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_lineage_renderer.py +2 -0
  13. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/.gitignore +0 -0
  14. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/AGENTS.md +0 -0
  15. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/CODE_OF_CONDUCT.md +0 -0
  16. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/CONTRIBUTING.md +0 -0
  17. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/LICENSE +0 -0
  18. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/README.md +0 -0
  19. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/SECURITY.md +0 -0
  20. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/THIRD_PARTY_LICENSES +0 -0
  21. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/docs/ADAPTER_CORRECTNESS_1.1.2.md +0 -0
  22. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/docs/ADAPTER_GUIDE.md +0 -0
  23. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/docs/ARCHITECTURE.md +0 -0
  24. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/docs/DEPENDABOT_AUTOMATION.md +0 -0
  25. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/docs/EMBEDDED_DATA_FORMAT.md +0 -0
  26. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/docs/LINEAGE.md +0 -0
  27. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/docs/PERFORMANCE.md +0 -0
  28. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/docs/SHOWCASE.md +0 -0
  29. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/docs/WORKSPACE_USAGE.md +0 -0
  30. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/docs/payload-schema.json +0 -0
  31. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/docs/workspace-usage-schema.json +0 -0
  32. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/scripts/capture_screenshot.py +0 -0
  33. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/scripts/check_color_pack_parity.py +0 -0
  34. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/scripts/check_markdown_links.py +0 -0
  35. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/scripts/check_workflow_policy.py +0 -0
  36. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/scripts/corpus_check.py +0 -0
  37. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/scripts/dependabot_review.py +0 -0
  38. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/scripts/generate_aa_large_fixture.py +0 -0
  39. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/scripts/generate_cja_lineage_poc.py +0 -0
  40. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/scripts/generate_examples.py +0 -0
  41. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/scripts/generate_large_fixture.py +0 -0
  42. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/scripts/mutate_fixture.py +0 -0
  43. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/scripts/package_smoke_check.py +0 -0
  44. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/scripts/perf_browser_check.py +0 -0
  45. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/scripts/perf_check.py +0 -0
  46. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/scripts/perf_lineage_poc.py +0 -0
  47. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/scripts/workspace_usage_fixture.py +0 -0
  48. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/__main__.py +0 -0
  49. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/adapters/__init__.py +0 -0
  50. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/adapters/base.py +0 -0
  51. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/adapters/cja_lineage.py +0 -0
  52. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/analysis/__init__.py +0 -0
  53. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/analysis/diff.py +0 -0
  54. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/analysis/formula_tree.py +0 -0
  55. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/analysis/lineage_layout.py +0 -0
  56. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/analysis/references.py +0 -0
  57. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/analysis/segment_tree.py +0 -0
  58. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/analysis/trend.py +0 -0
  59. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/cli/__init__.py +0 -0
  60. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/cli/exit_codes.py +0 -0
  61. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/cli/lineage.py +0 -0
  62. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/cli/lineage_output.py +0 -0
  63. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/cli/main.py +0 -0
  64. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/cli/output_safety.py +0 -0
  65. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/cli/workspace_usage.py +0 -0
  66. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/core/__init__.py +0 -0
  67. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/core/exceptions.py +0 -0
  68. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/core/lineage.py +0 -0
  69. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/core/models.py +0 -0
  70. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/core/structure_limits.py +0 -0
  71. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/core/visualizer.py +0 -0
  72. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/core/workspace_usage.py +0 -0
  73. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/input/__init__.py +0 -0
  74. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/input/detect.py +0 -0
  75. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/input/lineage_discovery.py +0 -0
  76. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/input/loader.py +0 -0
  77. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/input/series.py +0 -0
  78. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/input/shell_out.py +0 -0
  79. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/input/workspace_usage.py +0 -0
  80. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/render/__init__.py +0 -0
  81. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/render/color_packs.py +0 -0
  82. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/render/data_payload.py +0 -0
  83. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/render/lineage_payload.py +0 -0
  84. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/render/lineage_renderer.py +0 -0
  85. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/render/renderer.py +0 -0
  86. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/render/static/cja_lineage.css +0 -0
  87. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/render/static/cja_lineage.js +0 -0
  88. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/render/static/cja_lineage_graph.js +0 -0
  89. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/render/static/cja_lineage_roles.js +0 -0
  90. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/render/static/d3.min.js +0 -0
  91. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/render/static/visualizer.css +0 -0
  92. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/render/static/visualizer.js +0 -0
  93. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/render/static/visualizer_trend.js +0 -0
  94. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/render/templates/catalog.html.j2 +0 -0
  95. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/render/templates/changes.html.j2 +0 -0
  96. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/render/templates/graph.html.j2 +0 -0
  97. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/render/templates/index.html.j2 +0 -0
  98. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/render/templates/trend.html.j2 +0 -0
  99. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/render/trend_charts.py +0 -0
  100. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/render/workspace_usage.py +0 -0
  101. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/usage/__init__.py +0 -0
  102. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/usage/aa_api.py +0 -0
  103. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/usage/aa_sdk.py +0 -0
  104. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/usage/auth.py +0 -0
  105. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/usage/cja_api.py +0 -0
  106. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/usage/cja_sdk.py +0 -0
  107. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/usage/collector.py +0 -0
  108. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/usage/normalize.py +0 -0
  109. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/usage/sdk_worker.py +0 -0
  110. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/src/sdr_visualizer/usage/transport.py +0 -0
  111. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/__init__.py +0 -0
  112. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/adapter_cases.py +0 -0
  113. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/browser_support.py +0 -0
  114. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/conftest.py +0 -0
  115. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/fixtures/__init__.py +0 -0
  116. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/fixtures/aa_snapshot_clean.json +0 -0
  117. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/fixtures/aa_snapshot_messy.json +0 -0
  118. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/fixtures/cja_lineage_degraded.json +0 -0
  119. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/fixtures/cja_lineage_enriched.json +0 -0
  120. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/fixtures/cja_lineage_hostile.json +0 -0
  121. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/fixtures/cja_lineage_shared.json +0 -0
  122. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/fixtures/cja_snapshot_clean.json +0 -0
  123. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/fixtures/cja_snapshot_hostile.json +0 -0
  124. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/fixtures/cja_snapshot_messy.json +0 -0
  125. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/fixtures/cja_snapshot_minimal.json +0 -0
  126. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/fixtures/workspace_usage_aa_all_types.json +0 -0
  127. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/fixtures/workspace_usage_cja_all_types.json +0 -0
  128. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_adapter_correctness.py +0 -0
  129. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_adapter_fuzz.py +0 -0
  130. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_adapters_aa.py +0 -0
  131. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_adapters_cja.py +0 -0
  132. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_analysis_diff.py +0 -0
  133. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_analysis_formula_tree.py +0 -0
  134. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_analysis_references.py +0 -0
  135. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_analysis_segment_tree.py +0 -0
  136. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_analysis_trend.py +0 -0
  137. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_browser_functional.py +0 -0
  138. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_browser_support.py +0 -0
  139. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_cja_lineage.py +0 -0
  140. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_cja_lineage_driver.py +0 -0
  141. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_cli_flags.py +0 -0
  142. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_color_pack_parity.py +0 -0
  143. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_color_packs.py +0 -0
  144. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_corpus_check.py +0 -0
  145. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_data_payload.py +0 -0
  146. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_dependabot_review.py +0 -0
  147. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_entrypoint.py +0 -0
  148. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_generate_examples.py +0 -0
  149. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_input_modes.py +0 -0
  150. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_input_series.py +0 -0
  151. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_lineage_browser.py +0 -0
  152. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_lineage_cli.py +0 -0
  153. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_lineage_discovery.py +0 -0
  154. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_lineage_performance.py +0 -0
  155. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_markdown_links.py +0 -0
  156. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_minimal_fixture.py +0 -0
  157. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_mutate_fixture.py +0 -0
  158. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_output_safety.py +0 -0
  159. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_package_smoke_check.py +0 -0
  160. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_payload_schema.py +0 -0
  161. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_perf.py +0 -0
  162. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_perf_browser_check.py +0 -0
  163. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_release_documentation.py +0 -0
  164. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_renderer.py +0 -0
  165. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_renderer_anatomy.py +0 -0
  166. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_renderer_graph.py +0 -0
  167. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_semantic_properties.py +0 -0
  168. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_structure_limits.py +0 -0
  169. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_trend_charts.py +0 -0
  170. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_workflow_policy.py +0 -0
  171. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_workspace_usage.py +0 -0
  172. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_workspace_usage_aa_sdk.py +0 -0
  173. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_workspace_usage_auth.py +0 -0
  174. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_workspace_usage_cja_sdk.py +0 -0
  175. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_workspace_usage_cli.py +0 -0
  176. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_workspace_usage_collection.py +0 -0
  177. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_workspace_usage_offline.py +0 -0
  178. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_workspace_usage_payload.py +0 -0
  179. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_workspace_usage_perf.py +0 -0
  180. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_workspace_usage_sdk.py +0 -0
  181. {sdr_visualizer-1.2.3 → sdr_visualizer-1.2.4}/tests/test_workspace_usage_transport.py +0 -0
@@ -4,6 +4,19 @@ All notable changes to `sdr-visualizer` will be documented here. The format foll
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [1.2.4] - 2026-10-17
8
+
9
+ ### Changed
10
+
11
+ - Advance the catalog tested-through generator markers to `cja_auto_sdr`
12
+ 3.12.12 and `aa_auto_sdr` 1.21.24. Snapshots declaring those versions no
13
+ longer raise a newer-than-tested warning; later versions remain accepted
14
+ with a compatibility warning. The separate lineage allowlist is unchanged.
15
+
16
+ ### Fixed
17
+
18
+ - Label the lineage report footer “CJA lineage” instead of “Private CJA lineage POC”.
19
+
7
20
  ## [1.2.3] - 2026-10-16
8
21
 
9
22
  ### Fixed
@@ -739,7 +752,8 @@ The following are explicitly internal and may change without notice:
739
752
  - Workspace project visualization (v0.4)
740
753
  - Schema map view (v0.5)
741
754
 
742
- [Unreleased]: https://github.com/brian-a-au/sdr-visualizer/compare/v1.2.3...HEAD
755
+ [Unreleased]: https://github.com/brian-a-au/sdr-visualizer/compare/v1.2.4...HEAD
756
+ [1.2.4]: https://github.com/brian-a-au/sdr-visualizer/releases/tag/v1.2.4
743
757
  [1.2.3]: https://github.com/brian-a-au/sdr-visualizer/releases/tag/v1.2.3
744
758
  [1.2.2]: https://github.com/brian-a-au/sdr-visualizer/releases/tag/v1.2.2
745
759
  [1.2.1]: https://github.com/brian-a-au/sdr-visualizer/releases/tag/v1.2.1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: sdr-visualizer
3
- Version: 1.2.3
3
+ Version: 1.2.4
4
4
  Summary: Static-output visual catalog generator for Adobe Customer Journey Analytics and Adobe Analytics implementations.
5
5
  Project-URL: Homepage, https://brian-a-au.github.io/sdr-visualizer/
6
6
  Project-URL: Documentation, https://github.com/brian-a-au/sdr-visualizer#documentation
@@ -207,8 +207,8 @@ unusable, and capped-out members do not warn. The current markers are:
207
207
 
208
208
  | Platform | Warning threshold |
209
209
  |---|---:|
210
- | CJA (`cja_auto_sdr`) | 3.12.4 |
211
- | AA (`aa_auto_sdr`) | 1.21.15 |
210
+ | CJA (`cja_auto_sdr`) | 3.12.12 |
211
+ | AA (`aa_auto_sdr`) | 1.21.24 |
212
212
 
213
213
  A marker is evidence of exercised compatibility, not a promise about every
214
214
  possible snapshot produced by that version. It may advance only after a
@@ -200,7 +200,9 @@ cannot be closed by recording the current delta as diff-backed N/A.
200
200
  | Candidate SHA | pending |
201
201
  | Complete changed-path output permalink | pending |
202
202
  | Shared runtime paths changed | pending |
203
- | Full parity or diff-backed N/A evidence | pending |
203
+ | Full parity review, marker-only disposition, or diff-backed N/A evidence | pending |
204
+ | Marker-only: both projects' marker values and explicit-SHA adapter/helper review | pending |
205
+ | Marker-only: fresh candidate qualification and literal warning-boundary evidence | pending |
204
206
  | Current sibling PR and commit permalinks, if applicable | pending |
205
207
  | Shared-contract comparator result, if applicable | pending |
206
208
  | Reviewer / reviewed UTC / result | pending |
@@ -252,7 +254,7 @@ renumber these requirements.
252
254
  | R15 shipped, consistent docs | Markdown links + source-distribution check | pending |
253
255
  | R16 safe sharing guidance | README review | pending |
254
256
  | R17 current compatibility | privacy-safe fresh/corpus record | pending |
255
- | R18 sibling parity | linked green sibling PR/commit and passing shared-contract comparator when color packs change | pending |
257
+ | R18 sibling parity | full sibling review; linked green merged sibling PR/commit unless the marker-only disposition applies; shared-contract comparator when color packs change | pending |
256
258
  | R19 protected/monitored `main` | settings/API inspection | pending |
257
259
  | R20 complete community surface | community profile + advertised public-link resolution | pending |
258
260
  | R21 one traced candidate | this matrix + final go/no-go | pending |
@@ -312,20 +314,29 @@ renumber these requirements.
312
314
  ## Authoritative artifact and retention
313
315
 
314
316
  Use one artifact set throughout. Record every retry separately; never combine
315
- evidence from different attempts or manifests.
317
+ evidence from different attempts or manifests. Inspect retention settings before
318
+ tagging; inspect the created artifact's actual expiry before PyPI publication
319
+ approval. A configured duration does not establish the actual recovery deadline.
320
+ The actual expiry must cover the recorded full 90-day policy window; stop if it
321
+ falls short. Record the window start and its basis rather than inferring them
322
+ from a previous release's retention behavior.
316
323
 
317
324
  | Field | Value |
318
325
  |---|---|
319
326
  | Release workflow URL | pending |
320
327
  | Workflow run ID | pending |
321
328
  | Attempt | pending |
329
+ | Workflow creation UTC | pending |
322
330
  | Event / tag / `headSha` | pending |
323
331
  | Job conclusions | pending |
324
332
  | Retained artifact ID | pending |
325
333
  | Artifact URL | pending |
326
- | Artifact expiry UTC | pending |
327
- | Repository retention setting and inspection URL | pending |
328
- | 90-day recovery-window end UTC | pending |
334
+ | Artifact creation UTC | pending |
335
+ | Actual artifact expiry UTC and inspection URL | pending |
336
+ | Repository retention setting / workflow retention request / pre-tag inspection URL | pending |
337
+ | Policy-window start UTC and basis | pending |
338
+ | 90-day recovery deadline UTC | pending |
339
+ | Actual expiry covers the full policy window / post-build inspection UTC | pending |
329
340
  | Wheel filename / SHA-256 | pending |
330
341
  | Source-distribution filename / SHA-256 | pending |
331
342
  | Authoritative `SHA256SUMS` manifest URL | pending |
@@ -238,6 +238,24 @@ Review changes to `core/models.py`, `adapters/`,
238
238
  Missing access or an unreviewed sibling change blocks release; it does not turn
239
239
  parity into an optional follow-up.
240
240
 
241
+ A candidate whose changes to shared runtime paths are limited to
242
+ `TESTED_THROUGH_GENERATOR_VERSION` values in the catalog adapters still requires
243
+ full sibling review. Record the visualizer base and candidate SHAs, the sibling
244
+ full SHA, complete candidate changed paths, exact adapter diff, and each project's
245
+ marker values. Prove that the shared-path delta changes only those constant
246
+ values, and compare the warning and version-parser helpers at those SHAs. Retain
247
+ the documented intentional differences. Fresh exact-version snapshots, the full
248
+ historical private corpus, supported catalog modes, and literal target/next-patch
249
+ warning tests must pass for the visualizer candidate.
250
+
251
+ Marker values are project-specific qualification evidence. Do not copy them to
252
+ the sibling without that project's own qualification. When the review establishes
253
+ that no shared implementation change needs mirroring, record **full review — no
254
+ sibling code change required**; a new sibling PR and merge are not required for
255
+ this limited case. This is not diff-backed N/A. Any other shared-runtime change
256
+ follows the linked green, merged sibling requirement above. Color-pack comparator
257
+ requirements remain unchanged.
258
+
241
259
  For `render/color_packs.py`, both repositories must export the same shared
242
260
  contract snapshot: `catalog` (`default`, `ADBE`, `OMTR`, `BLUE` in
243
261
  that order), ordered `source_swatches` for all four entries, and ordered
@@ -262,7 +280,8 @@ parity may be recorded as a **diff-backed N/A**. The record must include the
262
280
  base and candidate SHAs, the complete changed-path output, and a reviewer
263
281
  confirmation that no shared runtime surface changed. A documentation-only
264
282
  label or commit message is not sufficient evidence. Any shared-path change
265
- requires the full sibling review above.
283
+ requires full sibling review; marker-only review may use the limited disposition
284
+ above.
266
285
 
267
286
  ## GitHub and community controls
268
287
 
@@ -337,7 +356,7 @@ checklist remains authoritative.
337
356
  | R15 shipped, consistent docs | Markdown links + source-distribution check | pending |
338
357
  | R16 safe sharing guidance | README review | pending |
339
358
  | R17 current compatibility | privacy-safe fresh/corpus record | pending |
340
- | R18 sibling parity | linked green sibling PR/commit and passing shared-contract comparator when color packs change | pending |
359
+ | R18 sibling parity | full sibling review; linked green merged sibling PR/commit unless the marker-only disposition applies; shared-contract comparator when color packs change | pending |
341
360
  | R19 protected/monitored `main` | settings/API inspection | pending |
342
361
  | R20 complete community surface | community profile + advertised public-link resolution | pending |
343
362
  | R21 one traced candidate | this matrix + final go/no-go | pending |
@@ -446,9 +465,23 @@ deploys again before announcement GO, repeat those checks against the newer
446
465
  deployment SHA.
447
466
 
448
467
  The authoritative workflow artifact must remain available throughout a
449
- 90-day recovery window. Confirm repository retention and the artifact's actual
450
- expiry before approval; if either is shorter, stop and repair the recovery
451
- path before tagging.
468
+ 90-day recovery window. Before tagging, inspect the repository retention setting
469
+ and workflow retention request; if either cannot support that window, stop and
470
+ repair the recovery path before tagging. The artifact does not exist at this
471
+ stage, so its actual expiry cannot yet be verified.
472
+
473
+ After the build creates the authoritative artifact and before PyPI publication
474
+ approval, record the workflow creation time, artifact creation time, policy-window
475
+ start and its basis, actual artifact expiry, and recovery deadline. Verify that
476
+ the actual expiry covers the full recorded 90-day window; if it falls short, stop
477
+ publication approval and repair the recovery path. Retain the same artifact and
478
+ manifest under the recovery rules below.
479
+
480
+ In the [1.2.3 publication record](https://github.com/brian-a-au/sdr-visualizer/pull/89),
481
+ the inspected artifact expired 90 days after workflow creation, rather than
482
+ 90 days after artifact creation. That is an observation about that release,
483
+ not a guarantee about GitHub retention behavior or a universal policy-window
484
+ anchor. Record and inspect these timestamps for every release.
452
485
 
453
486
  Every retry records its run ID, attempt, artifact ID, and manifest. Evidence
454
487
  from different artifact sets may never be combined.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sdr-visualizer"
3
- version = "1.2.3"
3
+ version = "1.2.4"
4
4
  description = "Static-output visual catalog generator for Adobe Customer Journey Analytics and Adobe Analytics implementations."
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -1,3 +1,3 @@
1
1
  """sdr-visualizer: visual catalog generator for CJA / AA implementations."""
2
2
 
3
- __version__ = "1.2.3"
3
+ __version__ = "1.2.4"
@@ -355,7 +355,7 @@ def _walk_segment_definition(definition: Any) -> tuple[int, list[str]]:
355
355
  # (bundled fixtures + the private real corpus; re-derive at each release:
356
356
  # grep -rho '"Tool Version": "[^"]*"|"tool_version": "[^"]*"' over corpus
357
357
  # and fixtures, take the max). The compatibility policy warns — never refuses.
358
- TESTED_THROUGH_GENERATOR_VERSION = "1.21.15"
358
+ TESTED_THROUGH_GENERATOR_VERSION = "1.21.24"
359
359
 
360
360
 
361
361
  def generator_version_warning(adapter_version: str) -> str | None:
@@ -367,7 +367,7 @@ def _walk_for_contexts(node: Any, out: list[str]) -> None:
367
367
  # (bundled fixtures + the private real corpus; re-derive at each release:
368
368
  # grep -rho '"Tool Version": "[^"]*"|"tool_version": "[^"]*"' over corpus
369
369
  # and fixtures, take the max). The compatibility policy warns — never refuses.
370
- TESTED_THROUGH_GENERATOR_VERSION = "3.12.4"
370
+ TESTED_THROUGH_GENERATOR_VERSION = "3.12.12"
371
371
 
372
372
 
373
373
  def generator_version_warning(adapter_version: str) -> str | None:
@@ -176,7 +176,7 @@
176
176
  <span class="separator">·</span>
177
177
  <span>Color pack: {{ color_pack }}</span>
178
178
  <span class="separator">·</span>
179
- <span>Private CJA lineage POC</span>
179
+ <span>CJA lineage</span>
180
180
  </footer>
181
181
 
182
182
  <script id="sdr-lineage-data" type="application/json">{{ payload_json | safe }}</script>
@@ -1096,3 +1096,33 @@ def test_tested_generator_version_does_not_warn(tmp_path, capsys):
1096
1096
  )
1097
1097
  assert rc == 0
1098
1098
  assert "generator version" not in capsys.readouterr().err
1099
+
1100
+
1101
+ @pytest.mark.parametrize(
1102
+ ("platform", "version", "warns"),
1103
+ [
1104
+ ("cja", "3.12.12", False),
1105
+ ("cja", "3.12.13", True),
1106
+ ("aa", "1.21.24", False),
1107
+ ("aa", "1.21.25", True),
1108
+ ],
1109
+ )
1110
+ def test_catalog_generator_warning_boundary(platform, version, warns, tmp_path, capsys):
1111
+ snapshot = json.loads(
1112
+ (FIXTURES / f"{platform}_snapshot_clean.json").read_text(encoding="utf-8")
1113
+ )
1114
+ if platform == "cja":
1115
+ snapshot["metadata"]["Tool Version"] = version
1116
+ else:
1117
+ snapshot["tool_version"] = version
1118
+ source = _write_json(tmp_path / "snapshot.json", snapshot)
1119
+ output = tmp_path / "report.html"
1120
+
1121
+ assert main([str(source), "--output", str(output), "--quiet"]) == 0
1122
+ assert output.is_file()
1123
+ stderr = capsys.readouterr().err
1124
+ if warns:
1125
+ assert f"snapshot generator version {version}" in stderr
1126
+ assert "newer" in stderr
1127
+ else:
1128
+ assert "generator version" not in stderr
@@ -399,6 +399,8 @@ def test_lineage_renderer_uses_visualizer_shell_and_color_pack_contract(code: st
399
399
  assert 'class="meta-strip ui"' in html
400
400
  assert 'class="view-nav ui"' in html
401
401
  assert 'class="footer ui"' in html
402
+ assert "<span>CJA lineage</span>" in html
403
+ assert "Private CJA lineage POC" not in html
402
404
  assert html.index("/* ---------- Reset & base ---------- */") < html.index(css)
403
405
  assert html.index(css) < html.index("</style>")
404
406
 
File without changes
File without changes
File without changes