boost-skill-cli 1.0.177__tar.gz → 1.0.179__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 (328) hide show
  1. boost_skill_cli-1.0.179/.markdownlint-cli2.jsonc +32 -0
  2. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/CLAUDE.md +1 -0
  3. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/PKG-INFO +2 -2
  4. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/README.md +1 -1
  5. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/_version.py +2 -2
  6. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/output.py +15 -4
  7. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_skill_cli.egg-info/PKG-INFO +2 -2
  8. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_skill_cli.egg-info/SOURCES.txt +1 -0
  9. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/DEBUGGING.md +3 -3
  10. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/design-roadmap.html +2 -2
  11. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/rag-architecture.md +9 -2
  12. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D08.md +4 -4
  13. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +3 -3
  14. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap.html +1 -1
  15. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/style/README.md +1 -1
  16. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_output.py +40 -1
  17. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/.gitattributes +0 -0
  18. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/.gitignore +0 -0
  19. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/.gitleaks.toml +0 -0
  20. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/.htmlvalidate.json +0 -0
  21. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/.pre-commit-config.yaml +0 -0
  22. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/CONTRIBUTING.md +0 -0
  23. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/LICENSE +0 -0
  24. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/MANIFEST.in +0 -0
  25. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/Makefile +0 -0
  26. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/SECURITY.md +0 -0
  27. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost +0 -0
  28. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/__init__.py +0 -0
  29. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/__main__.py +0 -0
  30. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/cli.py +0 -0
  31. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/cliparse.py +0 -0
  32. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/commands/__init__.py +0 -0
  33. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/commands/bmad.py +0 -0
  34. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/commands/configuration.py +0 -0
  35. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/commands/discovery.py +0 -0
  36. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/commands/hooks.py +0 -0
  37. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/commands/info.py +0 -0
  38. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/commands/intelligence.py +0 -0
  39. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/commands/pkg.py +0 -0
  40. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/commands/quality.py +0 -0
  41. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/commands/taps.py +0 -0
  42. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/commands/team.py +0 -0
  43. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/__init__.py +0 -0
  44. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/adapters.py +0 -0
  45. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/agents.py +0 -0
  46. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/ai.py +0 -0
  47. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/catalog.py +0 -0
  48. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/claude_settings.py +0 -0
  49. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/config.py +0 -0
  50. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/dense.py +0 -0
  51. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/embed.py +0 -0
  52. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/frontmatter.py +0 -0
  53. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/gitutil.py +0 -0
  54. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/imperative.py +0 -0
  55. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/injectscan.py +0 -0
  56. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/journal.py +0 -0
  57. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/lockfile.py +0 -0
  58. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/logs.py +0 -0
  59. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/mcp.py +0 -0
  60. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/nethttp.py +0 -0
  61. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/paths.py +0 -0
  62. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/policy.py +0 -0
  63. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/rag.py +0 -0
  64. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/registry.py +0 -0
  65. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/rules.py +0 -0
  66. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/secretscan.py +0 -0
  67. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/serve.py +0 -0
  68. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/stackprobe.py +0 -0
  69. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/staleness.py +0 -0
  70. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/store.py +0 -0
  71. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/typosquat.py +0 -0
  72. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/updatediff.py +0 -0
  73. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/util.py +0 -0
  74. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/core/workflows.py +0 -0
  75. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/data/registries.json +0 -0
  76. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/errors.py +0 -0
  77. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_cli/spin.py +0 -0
  78. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  79. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  80. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_skill_cli.egg-info/requires.txt +0 -0
  81. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/boost_skill_cli.egg-info/top_level.txt +0 -0
  82. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/.claude/settings.local.json +0 -0
  83. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/adapters.html +0 -0
  84. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/commands.html +0 -0
  85. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/demo.gif +0 -0
  86. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/demo.tape +0 -0
  87. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/eval.html +0 -0
  88. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/index.html +0 -0
  89. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/mcp-hub.html +0 -0
  90. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D01.md +0 -0
  91. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D02.md +0 -0
  92. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D03.md +0 -0
  93. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D04.md +0 -0
  94. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D05.md +0 -0
  95. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D06.md +0 -0
  96. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D07.md +0 -0
  97. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D09.md +0 -0
  98. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D10.md +0 -0
  99. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D11.md +0 -0
  100. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D12.md +0 -0
  101. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D13.md +0 -0
  102. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D14.md +0 -0
  103. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D15.md +0 -0
  104. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D16.md +0 -0
  105. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D17.md +0 -0
  106. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D18.md +0 -0
  107. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D19.md +0 -0
  108. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D20.md +0 -0
  109. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D21.md +0 -0
  110. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D22.md +0 -0
  111. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D23.md +0 -0
  112. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D24.md +0 -0
  113. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D25.md +0 -0
  114. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/BOOST-D26.md +0 -0
  115. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  116. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  117. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  118. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  119. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  120. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  121. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  122. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  123. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  124. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  125. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  126. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  127. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  128. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  129. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  130. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  131. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  132. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  133. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  134. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  135. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  136. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  137. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  138. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  139. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  140. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  141. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  142. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  143. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  144. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  145. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  146. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  147. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  148. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  149. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  150. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  151. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  152. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  153. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  154. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  155. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  156. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  157. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  158. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  159. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  160. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  161. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  162. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  163. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  164. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  165. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  166. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  167. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  168. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  169. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  170. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  171. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  172. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  173. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  174. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  175. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  176. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  177. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  178. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  179. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  180. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  181. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  182. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  183. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  184. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  185. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  186. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  187. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  188. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  189. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  190. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  191. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  192. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  193. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  194. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  195. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  196. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  197. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  198. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  199. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  200. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  201. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  202. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  203. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  204. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  205. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  206. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  207. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  208. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  209. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  210. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  211. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  212. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  213. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  214. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  215. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  216. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  217. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  218. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  219. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  220. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  221. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/docs/roadmap/items/workspace-scope-install.md +0 -0
  222. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/examples/README.md +0 -0
  223. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/examples/adapt-demo.sh +0 -0
  224. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/examples/boost-run-prototype.sh +0 -0
  225. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/index.html +0 -0
  226. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/noxfile.py +0 -0
  227. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/pyproject.toml +0 -0
  228. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/scripts/bench_cli.sh +0 -0
  229. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/scripts/build_command_reference.py +0 -0
  230. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/scripts/build_registries.py +0 -0
  231. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/scripts/build_roadmap.py +0 -0
  232. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/scripts/ensure_eval_corpus.sh +0 -0
  233. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/scripts/eval_explain.py +0 -0
  234. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/scripts/eval_recommend.py +0 -0
  235. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/scripts/eval_retrieval.py +0 -0
  236. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/scripts/eval_stats_summary.py +0 -0
  237. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/scripts/import_budget.py +0 -0
  238. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/scripts/mutation_gate.py +0 -0
  239. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/setup.cfg +0 -0
  240. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/style/boost.css +0 -0
  241. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/style/boost.js +0 -0
  242. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/style/demo.html +0 -0
  243. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/bdd/features/adapt.feature +0 -0
  244. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/bdd/features/browse.feature +0 -0
  245. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/bdd/features/count.feature +0 -0
  246. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/bdd/features/discover.feature +0 -0
  247. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/bdd/features/doctor.feature +0 -0
  248. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/bdd/features/environment.py +0 -0
  249. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/bdd/features/explain.feature +0 -0
  250. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/bdd/features/index.feature +0 -0
  251. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/bdd/features/install.feature +0 -0
  252. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/bdd/features/list.feature +0 -0
  253. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/bdd/features/mcp.feature +0 -0
  254. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/bdd/features/search.feature +0 -0
  255. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/bdd/features/steps/cli_steps.py +0 -0
  256. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/bdd/features/steps/discovery_steps.py +0 -0
  257. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/bdd/features/steps/mcp_steps.py +0 -0
  258. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/bdd/features/steps/quality_steps.py +0 -0
  259. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/conftest.py +0 -0
  260. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/eval/baseline.json +0 -0
  261. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/eval/explain.jsonl +0 -0
  262. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/eval/golden.jsonl +0 -0
  263. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/eval/recommend.jsonl +0 -0
  264. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/eval/taps.txt +0 -0
  265. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/functional/test_cli_adapt.py +0 -0
  266. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/functional/test_cli_bmad.py +0 -0
  267. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/functional/test_cli_configuration.py +0 -0
  268. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/functional/test_cli_discovery.py +0 -0
  269. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/functional/test_cli_hooks.py +0 -0
  270. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/functional/test_cli_info.py +0 -0
  271. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/functional/test_cli_intelligence.py +0 -0
  272. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/functional/test_cli_pkg.py +0 -0
  273. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/functional/test_cli_quality.py +0 -0
  274. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/functional/test_cli_taps.py +0 -0
  275. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/functional/test_cli_team.py +0 -0
  276. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/functional/test_everyday_loop.py +0 -0
  277. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/functional/test_property_parsers.py +0 -0
  278. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/make_fixture.py +0 -0
  279. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/perf/test_benchmarks.py +0 -0
  280. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/smoke.sh +0 -0
  281. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_adapters.py +0 -0
  282. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_agents.py +0 -0
  283. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_ai.py +0 -0
  284. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_catalog.py +0 -0
  285. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_claude_settings.py +0 -0
  286. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_cliparse.py +0 -0
  287. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_command_reference_fresh.py +0 -0
  288. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_config.py +0 -0
  289. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_dense.py +0 -0
  290. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_dense_fallback.py +0 -0
  291. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_docs_pages_linked.py +0 -0
  292. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_embed.py +0 -0
  293. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_errors_and_cli_table.py +0 -0
  294. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_eval_stats_summary.py +0 -0
  295. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_frontmatter.py +0 -0
  296. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_gitleaks_config.py +0 -0
  297. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_gitutil.py +0 -0
  298. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_imperative.py +0 -0
  299. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_import_budget.py +0 -0
  300. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_injectscan.py +0 -0
  301. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_journal.py +0 -0
  302. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_lockfile.py +0 -0
  303. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_logs.py +0 -0
  304. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_mcp.py +0 -0
  305. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_mutation_hardening.py +0 -0
  306. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_nethttp.py +0 -0
  307. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_paths.py +0 -0
  308. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_pkg_confusions.py +0 -0
  309. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_pkg_injection.py +0 -0
  310. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_pkg_secrets.py +0 -0
  311. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_policy.py +0 -0
  312. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_rag.py +0 -0
  313. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_registries_fresh.py +0 -0
  314. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_registry.py +0 -0
  315. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_roadmap_fresh.py +0 -0
  316. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_rules.py +0 -0
  317. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_secretscan.py +0 -0
  318. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_serve.py +0 -0
  319. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_spin.py +0 -0
  320. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_stackprobe.py +0 -0
  321. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_staleness.py +0 -0
  322. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_store.py +0 -0
  323. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_token_parity.py +0 -0
  324. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_typosquat.py +0 -0
  325. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_updatediff.py +0 -0
  326. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_util.py +0 -0
  327. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_version.py +0 -0
  328. {boost_skill_cli-1.0.177 → boost_skill_cli-1.0.179}/tests/unit/test_workflows.py +0 -0
@@ -0,0 +1,32 @@
1
+ // markdownlint-cli2 — consistency for every contributor-facing Markdown
2
+ // surface (README, CLAUDE.md, CONTRIBUTING, SECURITY, docs/*.md, examples,
3
+ // style). Run locally with:
4
+ // npx --yes markdownlint-cli2@0.18.1
5
+ // CI: .github/workflows/markdownlint.yml (path-filtered).
6
+ {
7
+ "globs": ["**/*.md"],
8
+ "ignores": [
9
+ ".venv/**",
10
+ "node_modules/**",
11
+ "mutants/**",
12
+ ".eval-home/**",
13
+ // Agent-harness config (skills/commands), not contributor documentation.
14
+ ".claude/**",
15
+ // Roadmap item bodies are HTML-in-Markdown card copy rendered by
16
+ // build_roadmap.py, not standalone documents — heading/inline-HTML
17
+ // document rules don't apply to them.
18
+ "docs/roadmap/items/**"
19
+ ],
20
+ "config": {
21
+ // Long lines are fine: prose wraps in the viewer, and tables/links often
22
+ // can't be split without hurting readability.
23
+ "MD013": false,
24
+ // Inline HTML is deliberate (badges, <details>, <img> sizing in README).
25
+ "MD033": false,
26
+ // The README opens with a centered logo block, not an H1.
27
+ "MD041": false,
28
+ // "boost — Homebrew for AI coding skills." style headings end with
29
+ // punctuation on purpose; it's the product tagline idiom.
30
+ "MD026": false
31
+ }
32
+ }
@@ -33,6 +33,7 @@ is relaxed in the gate (`--regression-eps 1`) so upstream repo drift can't flake
33
33
  it. Edit `taps.txt` → regenerate `tests/eval/baseline.json`. It runs in CI's
34
34
  `lint` job (pure-stdlib BM25, no `ANTHROPIC_API_KEY`; needs network to tap). The
35
35
  opt-in evals stay out of `check` and all degrade cleanly:
36
+
36
37
  - `make eval-ai` / `eval-rec` — key-gated LLM evals (Tier 2a rerank / 2b recommend).
37
38
  - `make eval-stats` — Tier 1b `ranx` paired-t-test between engines (`--stats`).
38
39
  - `make eval-explain` — Tier 2c `ragas` faithfulness for `boost explain`; needs
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.177
3
+ Version: 1.0.179
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -818,7 +818,7 @@ installed skills into one canonical store, and then symlinks them out to
818
818
  whichever agents you've got — all of it tracked in a lock file so state
819
819
  stays reproducible.
820
820
 
821
- ```
821
+ ```text
822
822
  GitHub registries ──boost update──▶ ~/.boost/repos/ (shallow clones)
823
823
  ~/.boost/cache/ (JSON catalogs)
824
824
  ──boost install─▶ ~/.agents/skills/ (canonical store)
@@ -102,7 +102,7 @@ installed skills into one canonical store, and then symlinks them out to
102
102
  whichever agents you've got — all of it tracked in a lock file so state
103
103
  stays reproducible.
104
104
 
105
- ```
105
+ ```text
106
106
  GitHub registries ──boost update──▶ ~/.boost/repos/ (shallow clones)
107
107
  ~/.boost/cache/ (JSON catalogs)
108
108
  ──boost install─▶ ~/.agents/skills/ (canonical store)
@@ -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.177'
22
- __version_tuple__ = version_tuple = (1, 0, 177)
21
+ __version__ = version = '1.0.179'
22
+ __version_tuple__ = version_tuple = (1, 0, 179)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -419,6 +419,11 @@ def table(rows, headers=None) -> None:
419
419
  numeric columns are right-aligned, and when a row would overflow the
420
420
  terminal the widest text column is shrunk (its cells clipped with an
421
421
  ellipsis) so wide catalogs stay on one line instead of wrapping.
422
+
423
+ On a color terminal, columns are joined by a dim ``│`` separator — the
424
+ terminal cousin of the web stat blocks' hairline borders. Non-color output
425
+ (pipes, NO_COLOR, tests) keeps the plain two-space gutter byte-for-byte,
426
+ so scripts that parse table output never see the ornament.
422
427
  """
423
428
  rows = [[str(x) for x in r] for r in rows]
424
429
  all_rows = ([list(map(str, headers))] if headers else []) + rows
@@ -429,17 +434,23 @@ def table(rows, headers=None) -> None:
429
434
  for i in range(ncols)]
430
435
  numeric = [_numeric_col([r[i] for r in rows if i < len(r)])
431
436
  for i in range(ncols)]
432
- widths = _fit_widths(widths, numeric, term_width())
437
+ if use_color():
438
+ sep, sep_w = " " + DIM + "│" + RESET + " ", 3
439
+ else:
440
+ sep, sep_w = " ", 2
441
+ widths = _fit_widths(widths, numeric, term_width(), sep=sep_w)
433
442
 
434
443
  def fmt(cell: str, i: int) -> str:
435
444
  cell = _clip_visible(cell, widths[i])
436
445
  return _rpad(cell, widths[i]) if numeric[i] else _pad(cell, widths[i])
437
446
 
438
447
  if headers:
439
- line = " ".join(fmt(str(h), i) for i, h in enumerate(headers))
440
- print(c(line.rstrip(), BOLD))
448
+ # Bold each header cell individually: a whole-line wrap would be
449
+ # cancelled at the first separator's RESET on color terminals.
450
+ cells = [c(fmt(str(h), i), BOLD) for i, h in enumerate(headers)]
451
+ print(sep.join(cells).rstrip())
441
452
  for r in rows:
442
- print(" ".join(fmt(cell, i) for i, cell in enumerate(r)).rstrip())
453
+ print(sep.join(fmt(cell, i) for i, cell in enumerate(r)).rstrip())
443
454
 
444
455
 
445
456
  def confirm(prompt: str, default: bool = False) -> bool:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.177
3
+ Version: 1.0.179
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -818,7 +818,7 @@ installed skills into one canonical store, and then symlinks them out to
818
818
  whichever agents you've got — all of it tracked in a lock file so state
819
819
  stays reproducible.
820
820
 
821
- ```
821
+ ```text
822
822
  GitHub registries ──boost update──▶ ~/.boost/repos/ (shallow clones)
823
823
  ~/.boost/cache/ (JSON catalogs)
824
824
  ──boost install─▶ ~/.agents/skills/ (canonical store)
@@ -2,6 +2,7 @@
2
2
  .gitignore
3
3
  .gitleaks.toml
4
4
  .htmlvalidate.json
5
+ .markdownlint-cli2.jsonc
5
6
  .pre-commit-config.yaml
6
7
  CLAUDE.md
7
8
  CONTRIBUTING.md
@@ -25,7 +25,7 @@ a run that looked completely normal.
25
25
 
26
26
  Every invocation appends to a rotating log file:
27
27
 
28
- ```
28
+ ```text
29
29
  ~/.boost/logs/boost.log # current file (rotates at ~1 MB)
30
30
  ~/.boost/logs/boost.log.1 # … up to 3 older files (~4 MB ceiling total)
31
31
  ```
@@ -47,7 +47,7 @@ Every invocation is bookended by two lines — an `invoke:` at the start and a
47
47
  the trail doubles as a lightweight timing record. A failing run logs its `done:`
48
48
  line at `WARNING`, so it stands out when you scan the log:
49
49
 
50
- ```
50
+ ```text
51
51
  … INFO boost: invoke: boost install brainstorming
52
52
  … INFO boost: done: boost install brainstorming -> rc=0 in 214ms
53
53
  … WARNING boost: done: boost install missing -> rc=1 in 48ms
@@ -93,7 +93,7 @@ print a clean one-line message and hint), boost:
93
93
 
94
94
  A crash report bundles everything needed to reproduce or file a bug:
95
95
 
96
- ```
96
+ ```text
97
97
  boost crash report
98
98
  ==================
99
99
  time: 2026-07-18T05:23:14Z
@@ -305,11 +305,11 @@
305
305
  </article>
306
306
 
307
307
  <article class="ritem" data-track="layout" data-impact="med">
308
- <div class="ritem-top"><span class="rid">BOOST-D08</span><span class="rstatus progress">In progress</span></div>
308
+ <div class="ritem-top"><span class="rid">BOOST-D08</span><span class="rstatus done">Shipped</span></div>
309
309
  <h4>Width-aware, right-aligned tables</h4>
310
310
  <p><code>table()</code> is a naive <code>ljust</code> that ignores terminal width and left-aligns numeric columns. Make it width-aware (shrink the widest text column to fit), right-align counts with tabular figures, and add dim column separators — matching the web's <code>font-variant-numeric: tabular-nums</code> stat blocks.</p>
311
311
  <div class="rmeta"><span class="m-cat">layout</span><span>Complexity M</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★★☆☆</span></div>
312
- <div class="rref"><code>core/output.py:71–83</code></div>
312
+ <div class="rref"><code>core/output.py · table()</code></div>
313
313
  </article>
314
314
 
315
315
  <article class="ritem" data-track="layout" data-impact="med">
@@ -8,7 +8,8 @@ through the MCP server — without breaking boost's zero-dependency posture.
8
8
 
9
9
  ## 1. Goals & non-goals
10
10
 
11
- **Goals**
11
+ ### Goals
12
+
12
13
  1. **Natural-language retrieval.** An agent asks "best skill for testing a React app" and boost returns a
13
14
  semantically-ranked shortlist with reasons — not just keyword hits.
14
15
  2. **Full-content search.** Rank over the *whole* skill/rule/workflow body, not only the frontmatter
@@ -18,7 +19,8 @@ through the MCP server — without breaking boost's zero-dependency posture.
18
19
  4. **MCP-hub extensibility.** Position the MCP server to later call out to GitHub, a database, and other
19
20
  dependencies as drop-in tools.
20
21
 
21
- **Non-goals**
22
+ ### Non-goals
23
+
22
24
  - Forcing FastAPI/django (the MCP transport is stdio JSON-RPC, not HTTP — a web framework has nothing to
23
25
  serve here).
24
26
  - Making a vector database or `langchain` a *required* runtime dependency.
@@ -124,6 +126,7 @@ and `commits`.
124
126
  **No third-party imports. Stays green through `make check`.**
125
127
 
126
128
  ### 6a. Engine — `boost_cli/core/rag.py`
129
+
127
130
  Pure-Python **BM25** over the chunk corpus (BM25 subsumes TF-IDF and handles document-length
128
131
  normalization, which matters when bodies vary from 3 lines to 300). Sparse term vectors are a legitimate
129
132
  "vector" retrieval — we get semantic *recall breadth* from full-text coverage, and the LLM rerank
@@ -133,6 +136,7 @@ Scoring is standard BM25 (`k1≈1.2`, `b≈0.75`). At ~9k items / tens of thousa
133
136
  dict-of-postings scan — comfortably sub-second per query in Python.
134
137
 
135
138
  ### 6b. Two-stage pipeline — upgrade `boost_search` / `catalog.search` **in place**
139
+
136
140
  No parallel MCP tool (per decision). The upgraded flow:
137
141
 
138
142
  1. **Retrieve** top-N (~60) candidate entries via `Retriever.query(task, k=60, kind=?)`.
@@ -148,12 +152,14 @@ No parallel MCP tool (per decision). The upgraded flow:
148
152
  `cmd_search` (`_ai_rank`, `discovery.py:150`) is folded into / superseded by this path.
149
153
 
150
154
  ### 6c. New command — `boost reindex`
155
+
151
156
  Register `("reindex", "find", "discovery", "Build/refresh the full-content search index")` in the
152
157
  `COMMANDS` table (`boost_cli/cli.py:48`) and add `cmd_reindex(argv)` in `discovery.py`. It calls
153
158
  `rag.build(catalog.all_entries())`, honoring commit-keyed incremental refresh, and prints doc/entry
154
159
  counts. The search path also lazily triggers a refresh when it detects a tap commit newer than the index.
155
160
 
156
161
  ### 6d. Tests & gates (Phase 1)
162
+
157
163
  - `tests/unit/test_rag.py` — chunking, BM25 scoring, incremental refresh, degradation paths. Because
158
164
  `rag.py` lives in `core/`, it is **mutation-gated at 80%** (`scripts/mutation_gate.py`) — write tests
159
165
  that pin the scoring math and the fallback branches.
@@ -179,6 +185,7 @@ rag = [ "..." ] # dense-embedding + vector-store stack
179
185
  ```
180
186
 
181
187
  A second `Retriever` implementation (`engine="dense"`) that:
188
+
182
189
  - **Embeds** each chunk into a dense vector — via a local model or an embeddings API over `urllib`
183
190
  (note: Anthropic exposes **no** embeddings endpoint; the API options are Voyage AI, which Anthropic
184
191
  recommends, or OpenAI). API keys follow the `core/ai.py` env-var convention.
@@ -2,15 +2,15 @@
2
2
  id: BOOST-D08
3
3
  board: design
4
4
  track: layout
5
- status: progress
5
+ status: done
6
6
  impact: med
7
7
  complexity: M
8
8
  wow: 3
9
9
  category: layout
10
- ref: "core/output.py:71–83"
10
+ ref: "core/output.py · table()"
11
11
  order: 4
12
- owner:
13
- pr:
12
+ owner: loop/d08-tables
13
+ pr: 202
14
14
  title: Width-aware, right-aligned tables
15
15
  ---
16
16
  <code>table()</code> is a naive <code>ljust</code> that ignores terminal width and left-aligns numeric columns. Make it width-aware (shrink the widest text column to fit), right-align counts with tabular figures, and add dim column separators — matching the web's <code>font-variant-numeric: tabular-nums</code> stat blocks.
@@ -2,15 +2,15 @@
2
2
  id: markdown-consistency-markdownlint-cli2
3
3
  board: code
4
4
  section: docsite
5
- status: planned
5
+ status: shipped
6
6
  category: Quality · Docs
7
7
  complexity: S
8
8
  impact: Low
9
9
  wow: 2
10
10
  note: every .md
11
11
  order: 7
12
- owner:
13
- pr:
12
+ owner: loop/mdlint
13
+ pr: 201
14
14
  title: Markdown consistency — <code>markdownlint-cli2</code>
15
15
  ---
16
16
  Lint every Markdown surface — README, <code>CLAUDE.md</code>,
@@ -1605,7 +1605,7 @@ and the work stays visible.</p>
1605
1605
  </article>
1606
1606
 
1607
1607
  <article class="cap rcard">
1608
- <div class="head"><span class="pill planned">Planned</span><span class="cat">Quality · Docs</span></div>
1608
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Quality · Docs</span></div>
1609
1609
  <h3>Markdown consistency — <code>markdownlint-cli2</code></h3>
1610
1610
  <p>Lint every Markdown surface — README, <code>CLAUDE.md</code>,
1611
1611
  <code>DEBUGGING.md</code>, <code>rag-architecture.md</code> — for
@@ -11,7 +11,7 @@ gated behind `prefers-reduced-motion`.
11
11
 
12
12
  Open [`demo.html`](demo.html) to see the whole system on one page.
13
13
 
14
- ```
14
+ ```text
15
15
  style/
16
16
  ├── boost.css the design system — tokens, atmosphere, primitives, a11y
17
17
  ├── boost.js two progressive enhancements: cursor glow + reveal-on-scroll
@@ -602,16 +602,55 @@ class TestTableColor:
602
602
  import re
603
603
  monkeypatch.setenv("CLICOLOR_FORCE", "1")
604
604
  # a colored cell must not push the next column out of alignment
605
+ # (color mode joins columns with the dim │ separator)
605
606
  output.table([[output.aurora("ab", "cyan"), "x"], ["cd", "y"]])
606
607
  vis = [re.sub(r"\x1b\[[0-9;]*m", "", ln)
607
608
  for ln in capsys.readouterr().out.splitlines()]
608
- assert vis == ["ab x", "cd y"]
609
+ assert vis == ["abx", "cdy"]
609
610
 
610
611
  def test_header_row_is_bold_when_forced(self, capsys, monkeypatch):
611
612
  monkeypatch.setenv("CLICOLOR_FORCE", "1")
612
613
  output.table([["x", "1"]], headers=["NAME", "N"])
613
614
  assert capsys.readouterr().out.startswith("\033[1mNAME")
614
615
 
616
+ def test_every_header_cell_is_bold(self, capsys, monkeypatch):
617
+ # A whole-line BOLD wrap would be cancelled by the separator's RESET;
618
+ # each header cell must carry its own bold instead.
619
+ monkeypatch.setenv("CLICOLOR_FORCE", "1")
620
+ output.table([["x", "y"]], headers=["AA", "BB"])
621
+ header = capsys.readouterr().out.splitlines()[0]
622
+ assert header.count(output.BOLD) == 2
623
+ assert "\033[1mAA" in header and "\033[1mBB" in header
624
+
625
+ def test_separator_is_dim_pipe_in_color_mode(self, capsys, monkeypatch):
626
+ monkeypatch.setenv("CLICOLOR_FORCE", "1")
627
+ output.table([("a", "b")])
628
+ out = capsys.readouterr().out
629
+ assert " " + output.DIM + "│" + output.RESET + " " in out
630
+
631
+ def test_no_separator_glyph_when_color_off(self, capsys, monkeypatch):
632
+ monkeypatch.setenv("NO_COLOR", "1")
633
+ monkeypatch.delenv("CLICOLOR_FORCE", raising=False)
634
+ output.table([("a", "b"), ("cc", "d")], headers=["X", "Y"])
635
+ out = capsys.readouterr().out
636
+ assert "│" not in out # plain two-space gutter,
637
+ assert out == "X Y\na b\ncc d\n" # byte-identical to before
638
+
639
+ def test_separator_width_counts_in_fit_budget(self, capsys, monkeypatch):
640
+ import os as _os
641
+ import re
642
+ # 3 columns of visible width 4 + two 3-wide separators = 18 > 17,
643
+ # so exactly one text column must shrink; with the old 2-wide gutter
644
+ # (total 16) nothing would shrink. Proves sep=3 reaches _fit_widths.
645
+ monkeypatch.setenv("CLICOLOR_FORCE", "1")
646
+ monkeypatch.setattr(output.shutil, "get_terminal_size",
647
+ lambda fb: _os.terminal_size((17, 24)))
648
+ output.table([("aaaa", "bbbb", "cccc")])
649
+ vis = re.sub(r"\x1b\[[0-9;]*m", "",
650
+ capsys.readouterr().out.splitlines()[0])
651
+ assert len(vis.rstrip()) <= 17
652
+ assert "…" in vis # a cell was clipped
653
+
615
654
 
616
655
  class TestTable:
617
656
  @pytest.fixture(autouse=True)