boost-skill-cli 1.0.178__tar.gz → 1.0.180__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 (330) hide show
  1. boost_skill_cli-1.0.180/.stylelintrc.json +20 -0
  2. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/PKG-INFO +1 -1
  3. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/_version.py +2 -2
  4. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/output.py +15 -4
  5. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_skill_cli.egg-info/PKG-INFO +1 -1
  6. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_skill_cli.egg-info/SOURCES.txt +2 -0
  7. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/design-roadmap.html +2 -2
  8. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D08.md +4 -4
  9. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +3 -3
  10. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap.html +1 -1
  11. boost_skill_cli-1.0.180/eslint.config.mjs +24 -0
  12. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/style/boost.css +31 -31
  13. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/style/boost.js +5 -5
  14. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_output.py +40 -1
  15. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/.gitattributes +0 -0
  16. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/.gitignore +0 -0
  17. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/.gitleaks.toml +0 -0
  18. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/.htmlvalidate.json +0 -0
  19. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/.markdownlint-cli2.jsonc +0 -0
  20. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/.pre-commit-config.yaml +0 -0
  21. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/CLAUDE.md +0 -0
  22. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/CONTRIBUTING.md +0 -0
  23. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/LICENSE +0 -0
  24. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/MANIFEST.in +0 -0
  25. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/Makefile +0 -0
  26. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/README.md +0 -0
  27. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/SECURITY.md +0 -0
  28. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost +0 -0
  29. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/__init__.py +0 -0
  30. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/__main__.py +0 -0
  31. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/cli.py +0 -0
  32. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/cliparse.py +0 -0
  33. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/commands/__init__.py +0 -0
  34. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/commands/bmad.py +0 -0
  35. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/commands/configuration.py +0 -0
  36. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/commands/discovery.py +0 -0
  37. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/commands/hooks.py +0 -0
  38. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/commands/info.py +0 -0
  39. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/commands/intelligence.py +0 -0
  40. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/commands/pkg.py +0 -0
  41. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/commands/quality.py +0 -0
  42. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/commands/taps.py +0 -0
  43. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/commands/team.py +0 -0
  44. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/__init__.py +0 -0
  45. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/adapters.py +0 -0
  46. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/agents.py +0 -0
  47. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/ai.py +0 -0
  48. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/catalog.py +0 -0
  49. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/claude_settings.py +0 -0
  50. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/config.py +0 -0
  51. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/dense.py +0 -0
  52. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/embed.py +0 -0
  53. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/frontmatter.py +0 -0
  54. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/gitutil.py +0 -0
  55. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/imperative.py +0 -0
  56. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/injectscan.py +0 -0
  57. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/journal.py +0 -0
  58. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/lockfile.py +0 -0
  59. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/logs.py +0 -0
  60. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/mcp.py +0 -0
  61. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/nethttp.py +0 -0
  62. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/paths.py +0 -0
  63. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/policy.py +0 -0
  64. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/rag.py +0 -0
  65. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/registry.py +0 -0
  66. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/rules.py +0 -0
  67. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/secretscan.py +0 -0
  68. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/serve.py +0 -0
  69. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/stackprobe.py +0 -0
  70. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/staleness.py +0 -0
  71. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/store.py +0 -0
  72. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/typosquat.py +0 -0
  73. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/updatediff.py +0 -0
  74. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/util.py +0 -0
  75. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/core/workflows.py +0 -0
  76. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/data/registries.json +0 -0
  77. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/errors.py +0 -0
  78. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_cli/spin.py +0 -0
  79. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  80. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  81. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_skill_cli.egg-info/requires.txt +0 -0
  82. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/boost_skill_cli.egg-info/top_level.txt +0 -0
  83. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/.claude/settings.local.json +0 -0
  84. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/DEBUGGING.md +0 -0
  85. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/adapters.html +0 -0
  86. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/commands.html +0 -0
  87. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/demo.gif +0 -0
  88. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/demo.tape +0 -0
  89. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/eval.html +0 -0
  90. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/index.html +0 -0
  91. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/mcp-hub.html +0 -0
  92. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/rag-architecture.md +0 -0
  93. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D01.md +0 -0
  94. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D02.md +0 -0
  95. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D03.md +0 -0
  96. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D04.md +0 -0
  97. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D05.md +0 -0
  98. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D06.md +0 -0
  99. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D07.md +0 -0
  100. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D09.md +0 -0
  101. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D10.md +0 -0
  102. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D11.md +0 -0
  103. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D12.md +0 -0
  104. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D13.md +0 -0
  105. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D14.md +0 -0
  106. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D15.md +0 -0
  107. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D16.md +0 -0
  108. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D17.md +0 -0
  109. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D18.md +0 -0
  110. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D19.md +0 -0
  111. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D20.md +0 -0
  112. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D21.md +0 -0
  113. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D22.md +0 -0
  114. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D23.md +0 -0
  115. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D24.md +0 -0
  116. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D25.md +0 -0
  117. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/BOOST-D26.md +0 -0
  118. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  119. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  120. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  121. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  122. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  123. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  124. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  125. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  126. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  127. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  128. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  129. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  130. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  131. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  132. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  133. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  134. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  135. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  136. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  137. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  138. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  139. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  140. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  141. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  142. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  143. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  144. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  145. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  146. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  147. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  148. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  149. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  150. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  151. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  152. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  153. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  154. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  155. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  156. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  157. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  158. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  159. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  160. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  161. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  162. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  163. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  164. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  165. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  166. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  167. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  168. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  169. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  170. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  171. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  172. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  173. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  174. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  175. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  176. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  177. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  178. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  179. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  180. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  181. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  182. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  183. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  184. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  185. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  186. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  187. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  188. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  189. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  190. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  191. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  192. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  193. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  194. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  195. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  196. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  197. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  198. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  199. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  200. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  201. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  202. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  203. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  204. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  205. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  206. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  207. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  208. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  209. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  210. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  211. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  212. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  213. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  214. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  215. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  216. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  217. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  218. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  219. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  220. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  221. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  222. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  223. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  224. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/docs/roadmap/items/workspace-scope-install.md +0 -0
  225. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/examples/README.md +0 -0
  226. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/examples/adapt-demo.sh +0 -0
  227. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/examples/boost-run-prototype.sh +0 -0
  228. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/index.html +0 -0
  229. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/noxfile.py +0 -0
  230. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/pyproject.toml +0 -0
  231. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/scripts/bench_cli.sh +0 -0
  232. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/scripts/build_command_reference.py +0 -0
  233. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/scripts/build_registries.py +0 -0
  234. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/scripts/build_roadmap.py +0 -0
  235. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/scripts/ensure_eval_corpus.sh +0 -0
  236. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/scripts/eval_explain.py +0 -0
  237. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/scripts/eval_recommend.py +0 -0
  238. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/scripts/eval_retrieval.py +0 -0
  239. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/scripts/eval_stats_summary.py +0 -0
  240. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/scripts/import_budget.py +0 -0
  241. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/scripts/mutation_gate.py +0 -0
  242. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/setup.cfg +0 -0
  243. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/style/README.md +0 -0
  244. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/style/demo.html +0 -0
  245. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/bdd/features/adapt.feature +0 -0
  246. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/bdd/features/browse.feature +0 -0
  247. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/bdd/features/count.feature +0 -0
  248. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/bdd/features/discover.feature +0 -0
  249. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/bdd/features/doctor.feature +0 -0
  250. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/bdd/features/environment.py +0 -0
  251. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/bdd/features/explain.feature +0 -0
  252. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/bdd/features/index.feature +0 -0
  253. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/bdd/features/install.feature +0 -0
  254. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/bdd/features/list.feature +0 -0
  255. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/bdd/features/mcp.feature +0 -0
  256. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/bdd/features/search.feature +0 -0
  257. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/bdd/features/steps/cli_steps.py +0 -0
  258. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/bdd/features/steps/discovery_steps.py +0 -0
  259. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/bdd/features/steps/mcp_steps.py +0 -0
  260. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/bdd/features/steps/quality_steps.py +0 -0
  261. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/conftest.py +0 -0
  262. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/eval/baseline.json +0 -0
  263. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/eval/explain.jsonl +0 -0
  264. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/eval/golden.jsonl +0 -0
  265. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/eval/recommend.jsonl +0 -0
  266. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/eval/taps.txt +0 -0
  267. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/functional/test_cli_adapt.py +0 -0
  268. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/functional/test_cli_bmad.py +0 -0
  269. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/functional/test_cli_configuration.py +0 -0
  270. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/functional/test_cli_discovery.py +0 -0
  271. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/functional/test_cli_hooks.py +0 -0
  272. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/functional/test_cli_info.py +0 -0
  273. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/functional/test_cli_intelligence.py +0 -0
  274. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/functional/test_cli_pkg.py +0 -0
  275. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/functional/test_cli_quality.py +0 -0
  276. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/functional/test_cli_taps.py +0 -0
  277. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/functional/test_cli_team.py +0 -0
  278. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/functional/test_everyday_loop.py +0 -0
  279. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/functional/test_property_parsers.py +0 -0
  280. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/make_fixture.py +0 -0
  281. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/perf/test_benchmarks.py +0 -0
  282. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/smoke.sh +0 -0
  283. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_adapters.py +0 -0
  284. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_agents.py +0 -0
  285. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_ai.py +0 -0
  286. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_catalog.py +0 -0
  287. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_claude_settings.py +0 -0
  288. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_cliparse.py +0 -0
  289. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_command_reference_fresh.py +0 -0
  290. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_config.py +0 -0
  291. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_dense.py +0 -0
  292. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_dense_fallback.py +0 -0
  293. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_docs_pages_linked.py +0 -0
  294. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_embed.py +0 -0
  295. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_errors_and_cli_table.py +0 -0
  296. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_eval_stats_summary.py +0 -0
  297. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_frontmatter.py +0 -0
  298. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_gitleaks_config.py +0 -0
  299. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_gitutil.py +0 -0
  300. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_imperative.py +0 -0
  301. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_import_budget.py +0 -0
  302. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_injectscan.py +0 -0
  303. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_journal.py +0 -0
  304. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_lockfile.py +0 -0
  305. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_logs.py +0 -0
  306. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_mcp.py +0 -0
  307. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_mutation_hardening.py +0 -0
  308. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_nethttp.py +0 -0
  309. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_paths.py +0 -0
  310. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_pkg_confusions.py +0 -0
  311. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_pkg_injection.py +0 -0
  312. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_pkg_secrets.py +0 -0
  313. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_policy.py +0 -0
  314. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_rag.py +0 -0
  315. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_registries_fresh.py +0 -0
  316. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_registry.py +0 -0
  317. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_roadmap_fresh.py +0 -0
  318. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_rules.py +0 -0
  319. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_secretscan.py +0 -0
  320. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_serve.py +0 -0
  321. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_spin.py +0 -0
  322. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_stackprobe.py +0 -0
  323. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_staleness.py +0 -0
  324. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_store.py +0 -0
  325. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_token_parity.py +0 -0
  326. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_typosquat.py +0 -0
  327. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_updatediff.py +0 -0
  328. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_util.py +0 -0
  329. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_version.py +0 -0
  330. {boost_skill_cli-1.0.178 → boost_skill_cli-1.0.180}/tests/unit/test_workflows.py +0 -0
@@ -0,0 +1,20 @@
1
+ {
2
+ "extends": "stylelint-config-standard",
3
+ "rules": {
4
+ "declaration-block-single-line-max-declarations": null,
5
+ "rule-empty-line-before": null,
6
+ "at-rule-empty-line-before": null,
7
+ "comment-empty-line-before": null,
8
+ "custom-property-empty-line-before": null,
9
+ "declaration-empty-line-before": null,
10
+ "no-duplicate-selectors": null,
11
+ "no-descending-specificity": null,
12
+ "property-no-vendor-prefix": null,
13
+ "value-no-vendor-prefix": null,
14
+ "selector-class-pattern": null,
15
+ "custom-property-pattern": null,
16
+ "keyframes-name-pattern": null,
17
+ "media-feature-range-notation": "prefix",
18
+ "value-keyword-case": null
19
+ }
20
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.178
3
+ Version: 1.0.180
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.178'
22
- __version_tuple__ = version_tuple = (1, 0, 178)
21
+ __version__ = version = '1.0.180'
22
+ __version_tuple__ = version_tuple = (1, 0, 180)
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.178
3
+ Version: 1.0.180
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -4,6 +4,7 @@
4
4
  .htmlvalidate.json
5
5
  .markdownlint-cli2.jsonc
6
6
  .pre-commit-config.yaml
7
+ .stylelintrc.json
7
8
  CLAUDE.md
8
9
  CONTRIBUTING.md
9
10
  LICENSE
@@ -12,6 +13,7 @@ Makefile
12
13
  README.md
13
14
  SECURITY.md
14
15
  boost
16
+ eslint.config.mjs
15
17
  index.html
16
18
  noxfile.py
17
19
  pyproject.toml
@@ -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">
@@ -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: theme-asset-linting-stylelint-eslint
3
3
  board: code
4
4
  section: docsite
5
- status: planned
5
+ status: shipped
6
6
  category: Quality · Style
7
7
  complexity: S
8
8
  impact: Med
9
9
  wow: 2
10
10
  note: shared blast radius
11
11
  order: 8
12
- owner:
13
- pr:
12
+ owner: loop/themelint
13
+ pr: 203
14
14
  title: Theme-asset linting — <code>stylelint</code> + <code>eslint</code>
15
15
  ---
16
16
  The shared <code>style/boost.css</code> and <code>boost.js</code> theme
@@ -1621,7 +1621,7 @@ and the work stays visible.</p>
1621
1621
  </article>
1622
1622
 
1623
1623
  <article class="cap rcard">
1624
- <div class="head"><span class="pill planned">Planned</span><span class="cat">Quality · Style</span></div>
1624
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Quality · Style</span></div>
1625
1625
  <h3>Theme-asset linting — <code>stylelint</code> + <code>eslint</code></h3>
1626
1626
  <p>The shared <code>style/boost.css</code> and <code>boost.js</code> theme
1627
1627
  the guide, roadmap and demo together, so a bug there recolours or breaks
@@ -0,0 +1,24 @@
1
+ // ESLint for the theme's one JS asset (style/boost.js — cursor glow + scroll
2
+ // reveal). Correctness rules only: undefined globals, unused vars, loose
3
+ // equality, legacy `var`. The file is plain-script browser JS, no build step.
4
+ export default [
5
+ {
6
+ files: ["style/**/*.js"],
7
+ languageOptions: {
8
+ ecmaVersion: 2021,
9
+ sourceType: "script",
10
+ globals: {
11
+ window: "readonly",
12
+ document: "readonly",
13
+ IntersectionObserver: "readonly",
14
+ requestAnimationFrame: "readonly",
15
+ },
16
+ },
17
+ rules: {
18
+ "no-undef": "error",
19
+ "no-unused-vars": "error",
20
+ "eqeqeq": "error",
21
+ "no-var": "error",
22
+ },
23
+ },
24
+ ];
@@ -10,7 +10,7 @@
10
10
 
11
11
  Usage:
12
12
  <link rel="stylesheet" href="boost.css">
13
- <script src="boost.js" defer></script> <!-- cursor glow + scroll reveal -->
13
+ <script src="boost.js" defer></script> (cursor glow + scroll reveal)
14
14
 
15
15
  The interactions (cursor-follow spotlight, reveal-on-scroll) are progressive
16
16
  enhancement — the page is fully styled and legible with JS disabled.
@@ -19,11 +19,11 @@
19
19
  :root {
20
20
  /* --- ground & ink --- */
21
21
  --bg: #07080f; /* near-black page ground */
22
- --panel: rgba(255,255,255,.035);
22
+ --panel: rgb(255 255 255 / 3.5%);
23
23
  --panel-solid: #0f1120;
24
- --line: rgba(255,255,255,.09);
25
- --line-soft: rgba(255,255,255,.05);
26
- --line-hi: rgba(255,255,255,.22);
24
+ --line: rgb(255 255 255 / 9%);
25
+ --line-soft: rgb(255 255 255 / 5%);
26
+ --line-hi: rgb(255 255 255 / 22%);
27
27
  --text: #e9ebf5;
28
28
  --text-2: #9298b0;
29
29
  --text-3: #676d86;
@@ -88,9 +88,9 @@ body::before {
88
88
  content: "";
89
89
  position: fixed; inset: -25vmax; z-index: 0; pointer-events: none;
90
90
  background:
91
- radial-gradient(38vmax 38vmax at 12% 6%, rgba(34,211,238,.20), transparent 60%),
92
- radial-gradient(34vmax 34vmax at 90% 16%, rgba(168,85,247,.18), transparent 60%),
93
- radial-gradient(30vmax 30vmax at 62% 104%, rgba(244,114,208,.14), transparent 62%);
91
+ radial-gradient(38vmax 38vmax at 12% 6%, rgb(34 211 238 / 20%), transparent 60%),
92
+ radial-gradient(34vmax 34vmax at 90% 16%, rgb(168 85 247 / 18%), transparent 60%),
93
+ radial-gradient(30vmax 30vmax at 62% 104%, rgb(244 114 208 / 14%), transparent 62%);
94
94
  filter: blur(34px) saturate(135%);
95
95
  animation: aurora-drift 42s ease-in-out infinite;
96
96
  will-change: transform;
@@ -99,11 +99,11 @@ body::after {
99
99
  content: "";
100
100
  position: fixed; inset: 0; z-index: 0; pointer-events: none;
101
101
  background-image:
102
- linear-gradient(rgba(255,255,255,.028) 1px, transparent 1px),
103
- linear-gradient(90deg, rgba(255,255,255,.028) 1px, transparent 1px);
102
+ linear-gradient(rgb(255 255 255 / 2.8%) 1px, transparent 1px),
103
+ linear-gradient(90deg, rgb(255 255 255 / 2.8%) 1px, transparent 1px);
104
104
  background-size: 46px 46px;
105
- -webkit-mask-image: radial-gradient(1200px 800px at 30% 0%, #000 0%, rgba(0,0,0,.3) 60%, rgba(0,0,0,.1) 100%);
106
- mask-image: radial-gradient(1200px 800px at 30% 0%, #000 0%, rgba(0,0,0,.3) 60%, rgba(0,0,0,.1) 100%);
105
+ -webkit-mask-image: radial-gradient(1200px 800px at 30% 0%, #000 0%, rgb(0 0 0 / 30%) 60%, rgb(0 0 0 / 10%) 100%);
106
+ mask-image: radial-gradient(1200px 800px at 30% 0%, #000 0%, rgb(0 0 0 / 30%) 60%, rgb(0 0 0 / 10%) 100%);
107
107
  }
108
108
  @keyframes aurora-drift {
109
109
  0%, 100% { transform: translate3d(0, 0, 0) scale(1); }
@@ -139,7 +139,7 @@ body::after {
139
139
  color: var(--text-2); font-size: 17.5px; text-wrap: balance;
140
140
  }
141
141
  .sec-sub code {
142
- color: var(--cyan); background: rgba(34,211,238,.1);
142
+ color: var(--cyan); background: rgb(34 211 238 / 10%);
143
143
  padding: 1px 7px; border-radius: 6px; font-size: .88em;
144
144
  }
145
145
 
@@ -155,9 +155,9 @@ body::after {
155
155
  .badge {
156
156
  display: inline-flex; align-items: center; gap: 8px;
157
157
  font-family: var(--mono); font-size: 12.5px; color: #c9e9f5;
158
- border: 1px solid rgba(34,211,238,.4); border-radius: 999px;
158
+ border: 1px solid rgb(34 211 238 / 40%); border-radius: 999px;
159
159
  padding: 7px 16px;
160
- background: rgba(34,211,238,.07);
160
+ background: rgb(34 211 238 / 7%);
161
161
  backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
162
162
  }
163
163
  .badge::before {
@@ -184,11 +184,11 @@ body::after {
184
184
  .btn-grad {
185
185
  color: #05141a;
186
186
  background: linear-gradient(96deg, var(--cyan), var(--violet));
187
- box-shadow: 0 8px 30px rgba(34,211,238,.32);
187
+ box-shadow: 0 8px 30px rgb(34 211 238 / 32%);
188
188
  }
189
- .btn-grad:hover { box-shadow: 0 12px 40px rgba(168,85,247,.5); }
189
+ .btn-grad:hover { box-shadow: 0 12px 40px rgb(168 85 247 / 50%); }
190
190
  .btn-ghost { color: var(--text); border-color: var(--line); background: var(--panel); }
191
- .btn-ghost:hover { border-color: rgba(255,255,255,.2); }
191
+ .btn-ghost:hover { border-color: rgb(255 255 255 / 20%); }
192
192
 
193
193
  /* ============================================================================
194
194
  Stat cards
@@ -228,14 +228,14 @@ a.cap, a.glass { text-decoration: none; }
228
228
  width: 46px; height: 46px; border-radius: 13px;
229
229
  display: flex; align-items: center; justify-content: center;
230
230
  font-size: 21px; margin-bottom: 20px;
231
- background: var(--ic-bg, rgba(255,255,255,.06)); color: var(--ic-fg, var(--text));
231
+ background: var(--ic-bg, rgb(255 255 255 / 6%)); color: var(--ic-fg, var(--text));
232
232
  border: 1px solid var(--line-soft);
233
233
  }
234
234
  .cap h3 { font-size: 19.5px; font-weight: 750; letter-spacing: -.01em; }
235
235
  .cap p { font-size: 14.5px; color: var(--text-2); margin-top: 10px; }
236
236
  .cap .tags { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 18px; }
237
237
  .cap .tags code, .chip {
238
- font-size: 12px; color: #d5d5e2; background: rgba(255,255,255,.06);
238
+ font-size: 12px; color: #d5d5e2; background: rgb(255 255 255 / 6%);
239
239
  border: 1px solid var(--line-soft); border-radius: 7px; padding: 3px 9px;
240
240
  }
241
241
  .cap .more { margin-top: auto; padding-top: 16px; font-size: 13.5px; font-weight: 650; color: var(--cyan); }
@@ -244,12 +244,12 @@ a.cap, a.glass { text-decoration: none; }
244
244
  Terminal window — for showing off commands / code
245
245
  ========================================================================== */
246
246
  .window {
247
- background: var(--term-bg); border: 1px solid rgba(255,255,255,.12);
248
- border-radius: 12px; box-shadow: 0 24px 70px rgba(0,0,0,.5); overflow: hidden;
247
+ background: var(--term-bg); border: 1px solid rgb(255 255 255 / 12%);
248
+ border-radius: 12px; box-shadow: 0 24px 70px rgb(0 0 0 / 50%); overflow: hidden;
249
249
  }
250
250
  .window .bar {
251
251
  display: flex; align-items: center; height: 38px; padding: 0 14px;
252
- background: var(--term-bar); border-bottom: 1px solid rgba(0,0,0,.25);
252
+ background: var(--term-bar); border-bottom: 1px solid rgb(0 0 0 / 25%);
253
253
  }
254
254
  .window .dots { display: flex; gap: 7px; }
255
255
  .window .dots i { width: 12px; height: 12px; border-radius: 50%; }
@@ -265,7 +265,7 @@ a.cap, a.glass { text-decoration: none; }
265
265
  font-family: var(--mono); font-size: 13.5px; line-height: 1.75; color: #dcdcf0;
266
266
  }
267
267
  /* syntax token colors for use inside .window pre */
268
- .tp { color: #8888aa; } /* prompt $ */
268
+ .tp { color: #88a; } /* prompt $ */
269
269
  .tv { color: #7ee787; font-weight: 700; } /* command name */
270
270
  .tc { color: var(--yellow); font-weight: 700; } /* subcommand */
271
271
  .tok { color: var(--green); } /* success check */
@@ -290,14 +290,14 @@ a.cap, a.glass { text-decoration: none; }
290
290
  content: ""; position: absolute; inset: 0; z-index: 0; border-radius: inherit;
291
291
  pointer-events: none; opacity: 0; transition: opacity .35s ease;
292
292
  background: radial-gradient(340px circle at var(--mx, 50%) var(--my, 50%),
293
- rgba(34,211,238,.16), rgba(168,85,247,.10) 42%, transparent 70%);
293
+ rgb(34 211 238 / 16%), rgb(168 85 247 / 10%) 42%, transparent 70%);
294
294
  }
295
295
  .glass:hover, .cap:hover, .stat:hover {
296
296
  transform: translateY(-4px);
297
297
  border-color: var(--line-hi);
298
- background: rgba(255,255,255,.06);
299
- box-shadow: 0 22px 60px -22px rgba(168,85,247,.5),
300
- inset 0 0 0 1px rgba(34,211,238,.12);
298
+ background: rgb(255 255 255 / 6%);
299
+ box-shadow: 0 22px 60px -22px rgb(168 85 247 / 50%),
300
+ inset 0 0 0 1px rgb(34 211 238 / 12%);
301
301
  }
302
302
  .glass:hover::before, .cap:hover::before, .stat:hover::before { opacity: 1; }
303
303
 
@@ -305,7 +305,7 @@ a.cap, a.glass { text-decoration: none; }
305
305
  .window { transition: box-shadow .35s ease, transform .3s ease; }
306
306
  .window:hover {
307
307
  transform: translateY(-3px);
308
- box-shadow: 0 30px 80px -24px rgba(34,211,238,.4), 0 24px 70px rgba(0,0,0,.5);
308
+ box-shadow: 0 30px 80px -24px rgb(34 211 238 / 40%), 0 24px 70px rgb(0 0 0 / 50%);
309
309
  }
310
310
 
311
311
  /* ============================================================================
@@ -333,11 +333,11 @@ a.cap, a.glass { text-decoration: none; }
333
333
  the Design Roadmap declared none at all, so its nav rendered unstyled.
334
334
 
335
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
336
+ BEFORE its own style block, so a page still carrying inline chrome keeps
337
337
  winning at equal specificity. Markup this expects:
338
338
 
339
339
  <header>
340
- <div class="wrap site-nav"> <!-- or: class="wrap nav" -->
340
+ <div class="wrap site-nav"> (or: class="wrap nav")
341
341
  <a class="logo" href="."><b>boost</b><span>Section</span></a>
342
342
  <ul><li><a href="#x">X</a></li><li><a class="cta" href=".">Go</a></li></ul>
343
343
  </div>
@@ -15,7 +15,7 @@
15
15
  // no-JS visitors with permanently-invisible content).
16
16
  document.documentElement.classList.add("js");
17
17
 
18
- var reduce = window.matchMedia &&
18
+ const reduce = window.matchMedia &&
19
19
  window.matchMedia("(prefers-reduced-motion: reduce)").matches;
20
20
 
21
21
  function ready(fn) {
@@ -25,11 +25,11 @@
25
25
 
26
26
  ready(function () {
27
27
  // ---- reveal on scroll ----
28
- var revealables = document.querySelectorAll(".reveal");
28
+ const revealables = document.querySelectorAll(".reveal");
29
29
  if (reduce || !("IntersectionObserver" in window)) {
30
30
  revealables.forEach(function (el) { el.classList.add("in"); });
31
31
  } else {
32
- var io = new IntersectionObserver(function (entries) {
32
+ const io = new IntersectionObserver(function (entries) {
33
33
  entries.forEach(function (en) {
34
34
  if (en.isIntersecting) {
35
35
  en.target.classList.add("in");
@@ -43,10 +43,10 @@
43
43
  // ---- cursor-following spotlight ----
44
44
  // Pointer position is written as element-local pixels into --mx / --my,
45
45
  // which the radial-gradient in boost.css reads.
46
- var glassy = document.querySelectorAll(".glass, .cap, .stat, .window");
46
+ const glassy = document.querySelectorAll(".glass, .cap, .stat, .window");
47
47
  glassy.forEach(function (el) {
48
48
  el.addEventListener("pointermove", function (e) {
49
- var r = el.getBoundingClientRect();
49
+ const r = el.getBoundingClientRect();
50
50
  el.style.setProperty("--mx", (e.clientX - r.left) + "px");
51
51
  el.style.setProperty("--my", (e.clientY - r.top) + "px");
52
52
  });
@@ -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)