boost-skill-cli 1.0.173__tar.gz → 1.0.175__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 (326) hide show
  1. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_skill_cli.egg-info/PKG-INFO +1 -1
  4. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_skill_cli.egg-info/SOURCES.txt +2 -0
  5. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +3 -3
  6. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/ranx-significance-monitor.md +3 -3
  7. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap.html +2 -2
  8. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/scripts/eval_retrieval.py +4 -3
  9. boost_skill_cli-1.0.175/scripts/eval_stats_summary.py +83 -0
  10. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/style/boost.css +67 -0
  11. boost_skill_cli-1.0.175/tests/unit/test_eval_stats_summary.py +80 -0
  12. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/.gitattributes +0 -0
  13. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/.gitignore +0 -0
  14. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/.gitleaks.toml +0 -0
  15. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/.pre-commit-config.yaml +0 -0
  16. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/CLAUDE.md +0 -0
  17. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/CONTRIBUTING.md +0 -0
  18. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/LICENSE +0 -0
  19. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/MANIFEST.in +0 -0
  20. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/Makefile +0 -0
  21. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/README.md +0 -0
  22. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/SECURITY.md +0 -0
  23. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost +0 -0
  24. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/__init__.py +0 -0
  25. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/__main__.py +0 -0
  26. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/cli.py +0 -0
  27. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/cliparse.py +0 -0
  28. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/commands/__init__.py +0 -0
  29. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/commands/bmad.py +0 -0
  30. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/commands/configuration.py +0 -0
  31. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/commands/discovery.py +0 -0
  32. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/commands/hooks.py +0 -0
  33. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/commands/info.py +0 -0
  34. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/commands/intelligence.py +0 -0
  35. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/commands/pkg.py +0 -0
  36. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/commands/quality.py +0 -0
  37. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/commands/taps.py +0 -0
  38. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/commands/team.py +0 -0
  39. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/__init__.py +0 -0
  40. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/adapters.py +0 -0
  41. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/agents.py +0 -0
  42. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/ai.py +0 -0
  43. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/catalog.py +0 -0
  44. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/claude_settings.py +0 -0
  45. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/config.py +0 -0
  46. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/dense.py +0 -0
  47. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/embed.py +0 -0
  48. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/frontmatter.py +0 -0
  49. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/gitutil.py +0 -0
  50. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/imperative.py +0 -0
  51. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/injectscan.py +0 -0
  52. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/journal.py +0 -0
  53. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/lockfile.py +0 -0
  54. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/logs.py +0 -0
  55. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/mcp.py +0 -0
  56. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/nethttp.py +0 -0
  57. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/output.py +0 -0
  58. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/paths.py +0 -0
  59. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/policy.py +0 -0
  60. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/rag.py +0 -0
  61. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/registry.py +0 -0
  62. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/rules.py +0 -0
  63. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/secretscan.py +0 -0
  64. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/serve.py +0 -0
  65. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/stackprobe.py +0 -0
  66. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/staleness.py +0 -0
  67. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/store.py +0 -0
  68. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/typosquat.py +0 -0
  69. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/updatediff.py +0 -0
  70. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/util.py +0 -0
  71. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/core/workflows.py +0 -0
  72. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/data/registries.json +0 -0
  73. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/errors.py +0 -0
  74. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_cli/spin.py +0 -0
  75. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  76. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  77. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_skill_cli.egg-info/requires.txt +0 -0
  78. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/boost_skill_cli.egg-info/top_level.txt +0 -0
  79. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/.claude/settings.local.json +0 -0
  80. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/DEBUGGING.md +0 -0
  81. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/adapters.html +0 -0
  82. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/commands.html +0 -0
  83. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/demo.gif +0 -0
  84. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/demo.tape +0 -0
  85. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/design-roadmap.html +0 -0
  86. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/eval.html +0 -0
  87. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/index.html +0 -0
  88. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/mcp-hub.html +0 -0
  89. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/rag-architecture.md +0 -0
  90. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D01.md +0 -0
  91. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D02.md +0 -0
  92. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D03.md +0 -0
  93. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D04.md +0 -0
  94. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D05.md +0 -0
  95. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D06.md +0 -0
  96. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D07.md +0 -0
  97. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D08.md +0 -0
  98. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D09.md +0 -0
  99. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D10.md +0 -0
  100. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D11.md +0 -0
  101. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D12.md +0 -0
  102. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D13.md +0 -0
  103. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D14.md +0 -0
  104. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D15.md +0 -0
  105. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D16.md +0 -0
  106. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D17.md +0 -0
  107. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D18.md +0 -0
  108. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D19.md +0 -0
  109. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D20.md +0 -0
  110. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D21.md +0 -0
  111. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D22.md +0 -0
  112. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D23.md +0 -0
  113. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D24.md +0 -0
  114. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D25.md +0 -0
  115. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/BOOST-D26.md +0 -0
  116. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  117. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  118. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  119. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  120. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  121. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  122. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  123. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  124. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  125. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  126. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  127. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  128. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  129. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  130. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  131. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  132. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  133. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  134. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  135. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  136. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  137. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  138. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  139. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  140. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  141. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  142. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  143. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  144. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  145. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  146. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  147. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  148. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  149. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  150. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  151. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  152. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  153. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  154. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  155. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  156. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  157. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  158. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  159. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  160. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  161. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  162. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  163. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  164. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  165. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  166. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  167. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  168. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  169. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  170. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  171. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  172. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  173. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  174. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  175. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  176. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  177. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  178. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  179. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  180. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  181. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  182. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  183. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  184. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  185. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  186. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  187. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  188. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  189. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  190. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  191. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  192. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  193. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  194. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  195. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  196. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  197. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  198. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  199. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  200. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  201. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  202. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  203. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  204. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  205. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  206. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  207. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  208. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  209. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  210. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  211. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  212. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  213. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  214. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  215. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  216. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  217. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  218. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  219. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  220. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  221. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/docs/roadmap/items/workspace-scope-install.md +0 -0
  222. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/examples/README.md +0 -0
  223. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/examples/adapt-demo.sh +0 -0
  224. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/examples/boost-run-prototype.sh +0 -0
  225. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/index.html +0 -0
  226. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/noxfile.py +0 -0
  227. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/pyproject.toml +0 -0
  228. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/scripts/bench_cli.sh +0 -0
  229. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/scripts/build_command_reference.py +0 -0
  230. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/scripts/build_registries.py +0 -0
  231. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/scripts/build_roadmap.py +0 -0
  232. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/scripts/ensure_eval_corpus.sh +0 -0
  233. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/scripts/eval_explain.py +0 -0
  234. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/scripts/eval_recommend.py +0 -0
  235. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/scripts/import_budget.py +0 -0
  236. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/scripts/mutation_gate.py +0 -0
  237. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/setup.cfg +0 -0
  238. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/style/README.md +0 -0
  239. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/style/boost.js +0 -0
  240. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/style/demo.html +0 -0
  241. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/bdd/features/adapt.feature +0 -0
  242. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/bdd/features/browse.feature +0 -0
  243. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/bdd/features/count.feature +0 -0
  244. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/bdd/features/discover.feature +0 -0
  245. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/bdd/features/doctor.feature +0 -0
  246. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/bdd/features/environment.py +0 -0
  247. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/bdd/features/explain.feature +0 -0
  248. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/bdd/features/index.feature +0 -0
  249. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/bdd/features/install.feature +0 -0
  250. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/bdd/features/list.feature +0 -0
  251. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/bdd/features/mcp.feature +0 -0
  252. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/bdd/features/search.feature +0 -0
  253. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/bdd/features/steps/cli_steps.py +0 -0
  254. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/bdd/features/steps/discovery_steps.py +0 -0
  255. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/bdd/features/steps/mcp_steps.py +0 -0
  256. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/bdd/features/steps/quality_steps.py +0 -0
  257. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/conftest.py +0 -0
  258. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/eval/baseline.json +0 -0
  259. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/eval/explain.jsonl +0 -0
  260. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/eval/golden.jsonl +0 -0
  261. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/eval/recommend.jsonl +0 -0
  262. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/eval/taps.txt +0 -0
  263. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/functional/test_cli_adapt.py +0 -0
  264. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/functional/test_cli_bmad.py +0 -0
  265. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/functional/test_cli_configuration.py +0 -0
  266. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/functional/test_cli_discovery.py +0 -0
  267. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/functional/test_cli_hooks.py +0 -0
  268. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/functional/test_cli_info.py +0 -0
  269. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/functional/test_cli_intelligence.py +0 -0
  270. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/functional/test_cli_pkg.py +0 -0
  271. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/functional/test_cli_quality.py +0 -0
  272. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/functional/test_cli_taps.py +0 -0
  273. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/functional/test_cli_team.py +0 -0
  274. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/functional/test_everyday_loop.py +0 -0
  275. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/functional/test_property_parsers.py +0 -0
  276. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/make_fixture.py +0 -0
  277. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/perf/test_benchmarks.py +0 -0
  278. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/smoke.sh +0 -0
  279. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_adapters.py +0 -0
  280. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_agents.py +0 -0
  281. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_ai.py +0 -0
  282. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_catalog.py +0 -0
  283. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_claude_settings.py +0 -0
  284. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_cliparse.py +0 -0
  285. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_command_reference_fresh.py +0 -0
  286. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_config.py +0 -0
  287. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_dense.py +0 -0
  288. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_dense_fallback.py +0 -0
  289. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_docs_pages_linked.py +0 -0
  290. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_embed.py +0 -0
  291. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_errors_and_cli_table.py +0 -0
  292. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_frontmatter.py +0 -0
  293. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_gitleaks_config.py +0 -0
  294. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_gitutil.py +0 -0
  295. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_imperative.py +0 -0
  296. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_import_budget.py +0 -0
  297. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_injectscan.py +0 -0
  298. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_journal.py +0 -0
  299. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_lockfile.py +0 -0
  300. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_logs.py +0 -0
  301. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_mcp.py +0 -0
  302. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_mutation_hardening.py +0 -0
  303. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_nethttp.py +0 -0
  304. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_output.py +0 -0
  305. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_paths.py +0 -0
  306. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_pkg_confusions.py +0 -0
  307. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_pkg_injection.py +0 -0
  308. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_pkg_secrets.py +0 -0
  309. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_policy.py +0 -0
  310. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_rag.py +0 -0
  311. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_registries_fresh.py +0 -0
  312. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_registry.py +0 -0
  313. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_roadmap_fresh.py +0 -0
  314. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_rules.py +0 -0
  315. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_secretscan.py +0 -0
  316. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_serve.py +0 -0
  317. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_spin.py +0 -0
  318. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_stackprobe.py +0 -0
  319. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_staleness.py +0 -0
  320. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_store.py +0 -0
  321. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_token_parity.py +0 -0
  322. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_typosquat.py +0 -0
  323. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_updatediff.py +0 -0
  324. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_util.py +0 -0
  325. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_version.py +0 -0
  326. {boost_skill_cli-1.0.173 → boost_skill_cli-1.0.175}/tests/unit/test_workflows.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.173
3
+ Version: 1.0.175
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.0.173'
22
- __version_tuple__ = version_tuple = (1, 0, 173)
21
+ __version__ = version = '1.0.175'
22
+ __version_tuple__ = version_tuple = (1, 0, 175)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.173
3
+ Version: 1.0.175
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -229,6 +229,7 @@ scripts/ensure_eval_corpus.sh
229
229
  scripts/eval_explain.py
230
230
  scripts/eval_recommend.py
231
231
  scripts/eval_retrieval.py
232
+ scripts/eval_stats_summary.py
232
233
  scripts/import_budget.py
233
234
  scripts/mutation_gate.py
234
235
  style/README.md
@@ -286,6 +287,7 @@ tests/unit/test_dense_fallback.py
286
287
  tests/unit/test_docs_pages_linked.py
287
288
  tests/unit/test_embed.py
288
289
  tests/unit/test_errors_and_cli_table.py
290
+ tests/unit/test_eval_stats_summary.py
289
291
  tests/unit/test_frontmatter.py
290
292
  tests/unit/test_gitleaks_config.py
291
293
  tests/unit/test_gitutil.py
@@ -2,15 +2,15 @@
2
2
  id: promote-nav-footer-into-the-shared-style-system
3
3
  board: code
4
4
  section: dx
5
- status: planned
5
+ status: shipped
6
6
  category: DX · Design system
7
7
  complexity: S
8
8
  impact: Med
9
9
  wow: 3
10
10
  note: <code>style/boost.css</code>
11
11
  order: 1
12
- owner:
13
- pr:
12
+ owner: loop/theme
13
+ pr: 197
14
14
  title: Promote nav / footer into the shared style system
15
15
  ---
16
16
  Canonical <code>style/boost.css</code> ships tokens + primitives but
@@ -2,15 +2,15 @@
2
2
  id: ranx-significance-monitor
3
3
  board: code
4
4
  section: health
5
- status: planned
5
+ status: shipped
6
6
  category: Quality · Retrieval eval
7
7
  complexity: S
8
8
  impact: Med
9
9
  wow: 3
10
10
  note: p-value, not point delta
11
11
  order: 5
12
- owner:
13
- pr:
12
+ owner: loop/evalstats
13
+ pr: 198
14
14
  title: Significance-tracked engine comparison (ranx monitor)
15
15
  ---
16
16
  Tier 1b (the <code>ranx</code> paired t-test, <code>--stats</code>) only runs on
@@ -1019,7 +1019,7 @@ harness.</p>
1019
1019
  </article>
1020
1020
 
1021
1021
  <article class="cap rcard">
1022
- <div class="head"><span class="pill planned">Planned</span><span class="cat">Quality · Retrieval eval</span></div>
1022
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Quality · Retrieval eval</span></div>
1023
1023
  <h3>Significance-tracked engine comparison (ranx monitor)</h3>
1024
1024
  <p>Tier 1b (the <code>ranx</code> paired t-test, <code>--stats</code>) only runs on
1025
1025
  demand today. Wire it into a scheduled CI monitor — like the
@@ -1308,7 +1308,7 @@ improvement is real (or isn't)."</p>
1308
1308
 
1309
1309
  <!-- ROADMAP:cards section=dx -->
1310
1310
  <article class="cap rcard">
1311
- <div class="head"><span class="pill planned">Planned</span><span class="cat">DX · Design system</span></div>
1311
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">DX · Design system</span></div>
1312
1312
  <h3>Promote nav / footer into the shared style system</h3>
1313
1313
  <p>Canonical <code>style/boost.css</code> ships tokens + primitives but
1314
1314
  <strong>no nav, logo, or footer</strong>, so every page (the guide and
@@ -18,9 +18,10 @@ the math, this asks "does the right skill actually come back for a real question
18
18
 
19
19
  Tier 1b (opt-in, offline): --stats runs a paired Student's t-test between the
20
20
  engines with `ranx`, so a metric gap is reported as statistically *significant*
21
- or not — a raw 0.919-vs-0.756 number can't say whether an engine is genuinely
22
- better or just luckier on 43 queries. Needs the [eval] extra; degrades cleanly
23
- if `ranx` is absent (never a core dependency).
21
+ or not — a raw recall-vs-recall number can't say whether an engine is genuinely
22
+ better or just luckier on the golden set. Needs the [eval] extra; degrades
23
+ cleanly if `ranx` is absent (never a core dependency). A scheduled CI monitor
24
+ (.github/workflows/eval-stats.yml) runs this and reports each metric's p-value.
24
25
 
25
26
  Tier 2a (LLM, opt-in, key-gated): --rerank measures the *lift* the LLM rerank
26
27
  stage (rag.rerank) adds over the raw BM25 order on the same golden set — no
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env python3
2
+ """Render the `--stats --json` significance payload as a Markdown summary.
3
+
4
+ Turns the ranx paired t-test output from ``eval_retrieval.py --stats --json``
5
+ into a GitHub-Step-Summary table: for the best engine vs each other engine, is
6
+ each metric's lead statistically significant (p < 0.05) or just noise. Kept
7
+ separate from the workflow YAML so it is unit-testable (tests/unit) and so the
8
+ significance-reading logic lives in one place.
9
+
10
+ Usage:
11
+ python3 scripts/eval_stats_summary.py stats.json # prints Markdown to stdout
12
+ """
13
+ from __future__ import annotations
14
+
15
+ import json
16
+ import sys
17
+ from typing import Optional
18
+
19
+ ALPHA = 0.05
20
+ HEADER = "### Tier 1b — retrieval significance (ranx paired t-test)\n"
21
+
22
+
23
+ def _load(path: str) -> Optional[dict]:
24
+ try:
25
+ with open(path, encoding="utf-8") as fh:
26
+ return json.load(fh)
27
+ except (OSError, ValueError):
28
+ return None
29
+
30
+
31
+ def render(payload: Optional[dict]) -> str:
32
+ """Markdown for a `--stats --json` payload (or a graceful skip note)."""
33
+ sig = (payload or {}).get("significance")
34
+ if not sig:
35
+ return (HEADER + "\n_skipped_ — no significance data "
36
+ "(the `[eval]` extra / `ranx` was unavailable, or fewer than "
37
+ "two engines ran).\n")
38
+
39
+ models = sig.get("model_names", [])
40
+ metrics = sig.get("metrics", [])
41
+ if len(models) < 2 or not metrics:
42
+ return HEADER + "\n_only one engine ran — nothing to compare._\n"
43
+
44
+ # The best engine is the last row of the comparison (engines are ordered
45
+ # worst→best upstream); every other engine carries the p-values of the best
46
+ # engine's lead over it in its `comparisons` block.
47
+ best = models[-1]
48
+ lines = [HEADER, "", "Best engine: **%s** (α = %.2f).\n" % (best, ALPHA)]
49
+ lines.append("| vs | " + " | ".join(metrics) + " |")
50
+ lines.append("|---|" + "|".join(["---"] * len(metrics)) + "|")
51
+
52
+ n_sig = 0
53
+ for other in models[:-1]:
54
+ comps = sig.get(other, {}).get("comparisons", {}).get(best, {})
55
+ cells = []
56
+ for m in metrics:
57
+ p = comps.get(m)
58
+ if p is None:
59
+ cells.append("—")
60
+ elif p < ALPHA:
61
+ cells.append("✅ p=%.4f" % p)
62
+ n_sig += 1
63
+ else:
64
+ cells.append("· p=%.4f" % p)
65
+ lines.append("| %s | %s |" % (other, " | ".join(cells)))
66
+
67
+ lines.append("")
68
+ lines.append("_✅ = %s beats that engine on the metric with p < %.2f "
69
+ "(a statistically real lead, not just a higher number)._"
70
+ % (best, ALPHA))
71
+ lines.append("\n%d of the compared metrics reach significance." % n_sig)
72
+ return "\n".join(lines) + "\n"
73
+
74
+
75
+ def main(argv: Optional[list] = None) -> int:
76
+ args = list(sys.argv[1:] if argv is None else argv)
77
+ path = args[0] if args else "stats.json"
78
+ sys.stdout.write(render(_load(path)))
79
+ return 0
80
+
81
+
82
+ if __name__ == "__main__":
83
+ raise SystemExit(main())
@@ -326,6 +326,73 @@ a.cap, a.glass { text-decoration: none; }
326
326
  .stat { padding: 18px 10px; }
327
327
  }
328
328
 
329
+ /* ============================================================================
330
+ Site chrome — nav · logo · footer
331
+
332
+ The page frame, defined once. Every page used to re-declare this inline and
333
+ the Design Roadmap declared none at all, so its nav rendered unstyled.
334
+
335
+ These are a shared *floor*, not an override: every page links this sheet
336
+ BEFORE its own <style>, so a page still carrying inline chrome keeps
337
+ winning at equal specificity. Markup this expects:
338
+
339
+ <header>
340
+ <div class="wrap site-nav"> <!-- or: class="wrap nav" -->
341
+ <a class="logo" href="."><b>boost</b><span>Section</span></a>
342
+ <ul><li><a href="#x">X</a></li><li><a class="cta" href=".">Go</a></li></ul>
343
+ </div>
344
+ </header>
345
+ ========================================================================== */
346
+ header {
347
+ position: sticky; top: 0; z-index: 50;
348
+ background: var(--panel-solid);
349
+ border-bottom: 1px solid var(--line);
350
+ }
351
+
352
+ .site-nav, header .nav {
353
+ display: flex; align-items: center; justify-content: space-between;
354
+ gap: 18px; padding: 12px 0;
355
+ }
356
+
357
+ .logo { display: flex; align-items: baseline; gap: 9px; text-decoration: none; }
358
+ .logo b {
359
+ font-family: var(--mono); font-size: 18px; font-weight: 700;
360
+ color: var(--cyan); letter-spacing: -.02em;
361
+ }
362
+ .logo span {
363
+ font-size: 10.5px; letter-spacing: .22em; text-transform: uppercase;
364
+ color: var(--text-2);
365
+ }
366
+
367
+ .site-nav ul, header .nav ul {
368
+ display: flex; align-items: center; flex-wrap: wrap; gap: 18px;
369
+ list-style: none; margin: 0; padding: 0;
370
+ }
371
+ .site-nav a, header .nav a {
372
+ color: var(--text-2); text-decoration: none; font-size: 13.5px;
373
+ }
374
+ .site-nav a:hover, header .nav a:hover { color: var(--text); }
375
+
376
+ /* the one emphasized link in the bar */
377
+ .site-nav a.cta, header .nav a.cta {
378
+ color: var(--bg); background: var(--grad); font-weight: 700;
379
+ padding: 7px 14px; border-radius: 999px;
380
+ }
381
+ .site-nav a.cta:hover, header .nav a.cta:hover { color: var(--bg); opacity: .88; }
382
+
383
+ footer {
384
+ margin-top: 64px; padding: 28px 0 40px;
385
+ border-top: 1px solid var(--line);
386
+ color: var(--text-3); font-size: 13px;
387
+ }
388
+ footer a { color: var(--text-2); text-decoration: none; }
389
+ footer a:hover { color: var(--text); }
390
+
391
+ @media (max-width: 720px) {
392
+ .site-nav, header .nav { flex-direction: column; align-items: flex-start; gap: 10px; }
393
+ .site-nav ul, header .nav ul { gap: 12px; }
394
+ }
395
+
329
396
  /* ============================================================================
330
397
  Accessibility — honor reduced-motion, and print cleanly
331
398
  ========================================================================== */
@@ -0,0 +1,80 @@
1
+ """Unit tests for scripts/eval_stats_summary.py — the significance summary."""
2
+ from __future__ import annotations
3
+
4
+ import importlib.util
5
+ import json
6
+ from pathlib import Path
7
+
8
+ import pytest
9
+
10
+ _SCRIPT = Path(__file__).resolve().parents[2] / "scripts" / "eval_stats_summary.py"
11
+
12
+ _skip = pytest.mark.skipif(not _SCRIPT.exists(), reason="script not reachable")
13
+
14
+
15
+ def _mod():
16
+ spec = importlib.util.spec_from_file_location("eval_stats_summary", _SCRIPT)
17
+ assert spec and spec.loader
18
+ module = importlib.util.module_from_spec(spec)
19
+ spec.loader.exec_module(module)
20
+ return module
21
+
22
+
23
+ _PAYLOAD = {
24
+ "significance": {
25
+ "stat_test": "student",
26
+ "metrics": ["recall@10", "mrr"],
27
+ "model_names": ["catalog.search", "BM25 full-content"],
28
+ "catalog.search": {
29
+ "comparisons": {
30
+ "BM25 full-content": {"recall@10": 0.0047, "mrr": 0.20},
31
+ },
32
+ },
33
+ "BM25 full-content": {"comparisons": {}},
34
+ }
35
+ }
36
+
37
+
38
+ @_skip
39
+ def test_significant_metric_marked_and_counted():
40
+ md = _mod().render(_PAYLOAD)
41
+ assert "Best engine: **BM25 full-content**" in md
42
+ assert "✅ p=0.0047" in md # recall@10 is significant
43
+ assert "· p=0.2000" in md # mrr is not
44
+ assert "1 of the compared metrics reach significance." in md
45
+
46
+
47
+ @_skip
48
+ def test_missing_significance_is_a_graceful_skip():
49
+ md = _mod().render({"k": 10})
50
+ assert "_skipped_" in md
51
+ assert "ranx" in md
52
+
53
+
54
+ @_skip
55
+ def test_none_payload_does_not_crash():
56
+ md = _mod().render(None)
57
+ assert "skipped" in md.lower()
58
+
59
+
60
+ @_skip
61
+ def test_single_engine_has_nothing_to_compare():
62
+ md = _mod().render({"significance": {
63
+ "metrics": ["recall@10"], "model_names": ["only-one"]}})
64
+ assert "nothing to compare" in md
65
+
66
+
67
+ @_skip
68
+ def test_main_reads_file_and_prints(tmp_path, capsys):
69
+ p = tmp_path / "stats.json"
70
+ p.write_text(json.dumps(_PAYLOAD), encoding="utf-8")
71
+ rc = _mod().main([str(p)])
72
+ assert rc == 0
73
+ assert "✅ p=0.0047" in capsys.readouterr().out
74
+
75
+
76
+ @_skip
77
+ def test_main_on_missing_file_is_graceful(capsys):
78
+ rc = _mod().main(["/no/such/stats.json"])
79
+ assert rc == 0
80
+ assert "skipped" in capsys.readouterr().out.lower()