boost-skill-cli 1.0.83__tar.gz → 1.0.85__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 (236) hide show
  1. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/Makefile +2 -1
  2. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/PKG-INFO +11 -1
  3. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/README.md +10 -0
  4. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/_version.py +2 -2
  5. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_skill_cli.egg-info/PKG-INFO +11 -1
  6. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_skill_cli.egg-info/SOURCES.txt +3 -0
  7. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/index.html +1 -0
  8. boost_skill_cli-1.0.85/docs/roadmap/items/log-timestamps-mislabeled-utc.md +25 -0
  9. boost_skill_cli-1.0.85/docs/roadmap/items/make-the-roadmaps-discoverable.md +22 -0
  10. boost_skill_cli-1.0.85/docs/roadmap/items/mcp-launch-objc-fork-safety.md +26 -0
  11. boost_skill_cli-1.0.85/docs/roadmap/items/rule-install-native-materialization.md +29 -0
  12. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/typo-detection-codespell.md +3 -3
  13. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap.html +79 -9
  14. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/pyproject.toml +7 -0
  15. boost_skill_cli-1.0.83/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -20
  16. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/.gitattributes +0 -0
  17. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/.gitignore +0 -0
  18. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/CLAUDE.md +0 -0
  19. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/CONTRIBUTING.md +0 -0
  20. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/LICENSE +0 -0
  21. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/MANIFEST.in +0 -0
  22. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/SECURITY.md +0 -0
  23. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost +0 -0
  24. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/__init__.py +0 -0
  25. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/__main__.py +0 -0
  26. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/cli.py +0 -0
  27. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/cliparse.py +0 -0
  28. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/commands/__init__.py +0 -0
  29. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/commands/bmad.py +0 -0
  30. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/commands/configuration.py +0 -0
  31. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/commands/discovery.py +0 -0
  32. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/commands/hooks.py +0 -0
  33. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/commands/info.py +0 -0
  34. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/commands/intelligence.py +0 -0
  35. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/commands/pkg.py +0 -0
  36. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/commands/quality.py +0 -0
  37. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/commands/taps.py +0 -0
  38. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/commands/team.py +0 -0
  39. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/core/__init__.py +0 -0
  40. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/core/agents.py +0 -0
  41. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/core/ai.py +0 -0
  42. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/core/catalog.py +0 -0
  43. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/core/claude_settings.py +0 -0
  44. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/core/config.py +0 -0
  45. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/core/dense.py +0 -0
  46. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/core/embed.py +0 -0
  47. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/core/frontmatter.py +0 -0
  48. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/core/gitutil.py +0 -0
  49. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/core/journal.py +0 -0
  50. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/core/lockfile.py +0 -0
  51. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/core/logs.py +0 -0
  52. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/core/mcp.py +0 -0
  53. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/core/output.py +0 -0
  54. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/core/paths.py +0 -0
  55. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/core/policy.py +0 -0
  56. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/core/rag.py +0 -0
  57. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/core/registry.py +0 -0
  58. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/core/staleness.py +0 -0
  59. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/core/store.py +0 -0
  60. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/core/util.py +0 -0
  61. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/data/registries.json +0 -0
  62. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/errors.py +0 -0
  63. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_cli/spin.py +0 -0
  64. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  65. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  66. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_skill_cli.egg-info/requires.txt +0 -0
  67. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/boost_skill_cli.egg-info/top_level.txt +0 -0
  68. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/.claude/settings.local.json +0 -0
  69. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/DEBUGGING.md +0 -0
  70. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/demo.gif +0 -0
  71. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/demo.tape +0 -0
  72. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/design-roadmap.html +0 -0
  73. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/mcp-hub.html +0 -0
  74. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/rag-architecture.md +0 -0
  75. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D01.md +0 -0
  76. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D02.md +0 -0
  77. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D03.md +0 -0
  78. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D04.md +0 -0
  79. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D05.md +0 -0
  80. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D06.md +0 -0
  81. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D07.md +0 -0
  82. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D08.md +0 -0
  83. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D09.md +0 -0
  84. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D10.md +0 -0
  85. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D11.md +0 -0
  86. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D12.md +0 -0
  87. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D13.md +0 -0
  88. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D14.md +0 -0
  89. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D15.md +0 -0
  90. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D16.md +0 -0
  91. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D17.md +0 -0
  92. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D18.md +0 -0
  93. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D19.md +0 -0
  94. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D20.md +0 -0
  95. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D21.md +0 -0
  96. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D22.md +0 -0
  97. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D23.md +0 -0
  98. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D24.md +0 -0
  99. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D25.md +0 -0
  100. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/BOOST-D26.md +0 -0
  101. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  102. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  103. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  104. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  105. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  106. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  107. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  108. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  109. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  110. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  111. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  112. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  113. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  114. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  115. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  116. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  117. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  118. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  119. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  120. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  121. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  122. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  123. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  124. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  125. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  126. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  127. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  128. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  129. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  130. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  131. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  132. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  133. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  134. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  135. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  136. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  137. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  138. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  139. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  140. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  141. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  142. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  143. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  144. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  145. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  146. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  147. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  148. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  149. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  150. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  151. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  152. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  153. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  154. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  155. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  156. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  157. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  158. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  159. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  160. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  161. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  162. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  163. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  164. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  165. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  166. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  167. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  168. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  169. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  170. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  171. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  172. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  173. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  174. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  175. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  176. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  177. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  178. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  179. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  180. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  181. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  182. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  183. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  184. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/index.html +0 -0
  185. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/scripts/build_registries.py +0 -0
  186. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/scripts/build_roadmap.py +0 -0
  187. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/scripts/mutation_gate.py +0 -0
  188. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/setup.cfg +0 -0
  189. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/style/README.md +0 -0
  190. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/style/boost.css +0 -0
  191. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/style/boost.js +0 -0
  192. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/style/demo.html +0 -0
  193. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/conftest.py +0 -0
  194. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/functional/test_cli_bmad.py +0 -0
  195. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/functional/test_cli_configuration.py +0 -0
  196. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/functional/test_cli_discovery.py +0 -0
  197. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/functional/test_cli_hooks.py +0 -0
  198. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/functional/test_cli_info.py +0 -0
  199. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/functional/test_cli_intelligence.py +0 -0
  200. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/functional/test_cli_pkg.py +0 -0
  201. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/functional/test_cli_quality.py +0 -0
  202. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/functional/test_cli_taps.py +0 -0
  203. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/functional/test_cli_team.py +0 -0
  204. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/functional/test_everyday_loop.py +0 -0
  205. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/make_fixture.py +0 -0
  206. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/smoke.sh +0 -0
  207. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_agents.py +0 -0
  208. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_ai.py +0 -0
  209. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_catalog.py +0 -0
  210. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_claude_settings.py +0 -0
  211. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_cliparse.py +0 -0
  212. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_config.py +0 -0
  213. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_dense.py +0 -0
  214. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_dense_fallback.py +0 -0
  215. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_embed.py +0 -0
  216. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_errors_and_cli_table.py +0 -0
  217. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_frontmatter.py +0 -0
  218. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_gitutil.py +0 -0
  219. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_journal.py +0 -0
  220. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_lockfile.py +0 -0
  221. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_logs.py +0 -0
  222. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_mcp.py +0 -0
  223. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_mutation_hardening.py +0 -0
  224. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_output.py +0 -0
  225. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_paths.py +0 -0
  226. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_policy.py +0 -0
  227. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_rag.py +0 -0
  228. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_registries_fresh.py +0 -0
  229. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_registry.py +0 -0
  230. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_roadmap_fresh.py +0 -0
  231. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_spin.py +0 -0
  232. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_staleness.py +0 -0
  233. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_store.py +0 -0
  234. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_token_parity.py +0 -0
  235. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_util.py +0 -0
  236. {boost_skill_cli-1.0.83 → boost_skill_cli-1.0.85}/tests/unit/test_version.py +0 -0
@@ -10,7 +10,7 @@ PYTEST := $(VENV)/bin/pytest
10
10
 
11
11
  venv:
12
12
  python3 -m venv $(VENV)
13
- $(VENV)/bin/pip -q install pytest pytest-cov coverage mutmut ruff mypy
13
+ $(VENV)/bin/pip -q install pytest pytest-cov coverage mutmut ruff mypy codespell
14
14
 
15
15
  unit:
16
16
  $(PYTEST) tests/unit -q
@@ -35,6 +35,7 @@ mutation:
35
35
  lint:
36
36
  $(VENV)/bin/ruff check boost_cli tests
37
37
  $(VENV)/bin/mypy
38
+ $(VENV)/bin/codespell boost_cli docs README.md
38
39
  $(PY) scripts/build_registries.py --check
39
40
  $(PY) scripts/build_roadmap.py --check
40
41
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.83
3
+ Version: 1.0.85
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -726,6 +726,16 @@ update all of them, you run one command.
726
726
  <sub><em>tap a registry → search → install into every agent → doctor — one flow</em></sub>
727
727
  </p>
728
728
 
729
+ ## Roadmap
730
+
731
+ boost is built in the open. Two living boards — generated from
732
+ `docs/roadmap/items/*.md` — track what's shipped, in flight, and planned:
733
+
734
+ - **[Code roadmap](https://jonnyeclectic.github.io/boost/roadmap.html)** — engine, correctness, and tooling work
735
+ - **[Design roadmap](https://jonnyeclectic.github.io/boost/design-roadmap.html)** — the Visual Guide and docsite aesthetics
736
+
737
+ Both are reachable from the [Visual Guide](https://jonnyeclectic.github.io/boost/) nav.
738
+
729
739
  ## What's a "skill," exactly?
730
740
 
731
741
  A **skill** is just a `SKILL.md` file — Markdown plus a bit of YAML up top —
@@ -20,6 +20,16 @@ update all of them, you run one command.
20
20
  <sub><em>tap a registry → search → install into every agent → doctor — one flow</em></sub>
21
21
  </p>
22
22
 
23
+ ## Roadmap
24
+
25
+ boost is built in the open. Two living boards — generated from
26
+ `docs/roadmap/items/*.md` — track what's shipped, in flight, and planned:
27
+
28
+ - **[Code roadmap](https://jonnyeclectic.github.io/boost/roadmap.html)** — engine, correctness, and tooling work
29
+ - **[Design roadmap](https://jonnyeclectic.github.io/boost/design-roadmap.html)** — the Visual Guide and docsite aesthetics
30
+
31
+ Both are reachable from the [Visual Guide](https://jonnyeclectic.github.io/boost/) nav.
32
+
23
33
  ## What's a "skill," exactly?
24
34
 
25
35
  A **skill** is just a `SKILL.md` file — Markdown plus a bit of YAML up top —
@@ -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.83'
22
- __version_tuple__ = version_tuple = (1, 0, 83)
21
+ __version__ = version = '1.0.85'
22
+ __version_tuple__ = version_tuple = (1, 0, 85)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.83
3
+ Version: 1.0.85
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -726,6 +726,16 @@ update all of them, you run one command.
726
726
  <sub><em>tap a registry → search → install into every agent → doctor — one flow</em></sub>
727
727
  </p>
728
728
 
729
+ ## Roadmap
730
+
731
+ boost is built in the open. Two living boards — generated from
732
+ `docs/roadmap/items/*.md` — track what's shipped, in flight, and planned:
733
+
734
+ - **[Code roadmap](https://jonnyeclectic.github.io/boost/roadmap.html)** — engine, correctness, and tooling work
735
+ - **[Design roadmap](https://jonnyeclectic.github.io/boost/design-roadmap.html)** — the Visual Guide and docsite aesthetics
736
+
737
+ Both are reachable from the [Visual Guide](https://jonnyeclectic.github.io/boost/) nav.
738
+
729
739
  ## What's a "skill," exactly?
730
740
 
731
741
  A **skill** is just a `SKILL.md` file — Markdown plus a bit of YAML up top —
@@ -127,9 +127,11 @@ docs/roadmap/items/layering-guard-import-linter.md
127
127
  docs/roadmap/items/lighthouse-ci-on-the-pages-site.md
128
128
  docs/roadmap/items/localize-the-stored-bm25-snippet.md
129
129
  docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md
130
+ docs/roadmap/items/log-timestamps-mislabeled-utc.md
130
131
  docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md
131
132
  docs/roadmap/items/make-the-roadmaps-discoverable.md
132
133
  docs/roadmap/items/markdown-consistency-markdownlint-cli2.md
134
+ docs/roadmap/items/mcp-launch-objc-fork-safety.md
133
135
  docs/roadmap/items/memoize-config-load-in-process.md
134
136
  docs/roadmap/items/modernization-smells-refurb-pyupgrade.md
135
137
  docs/roadmap/items/mutation-hardening-core-frontmatter-py.md
@@ -152,6 +154,7 @@ docs/roadmap/items/reconcile-the-theme-drift.md
152
154
  docs/roadmap/items/refresh-the-marketing-surface.md
153
155
  docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md
154
156
  docs/roadmap/items/robust-tag-argument-parsing.md
157
+ docs/roadmap/items/rule-install-native-materialization.md
155
158
  docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md
156
159
  docs/roadmap/items/sbom-aware-scanning-osv-scanner.md
157
160
  docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md
@@ -447,6 +447,7 @@
447
447
  <li><a href="#capabilities">Capabilities</a></li>
448
448
  <li><a href="#registries">Registries</a></li>
449
449
  <li><a href="roadmap.html">Roadmap&nbsp;↗</a></li>
450
+ <li><a href="design-roadmap.html">Design&nbsp;↗</a></li>
450
451
  <li><a href="https://jonnyeclectic.github.io/portfolio/">Portfolio&nbsp;↗</a></li>
451
452
  <li><a class="cta" href="#start">Get started</a></li>
452
453
  </ul>
@@ -0,0 +1,25 @@
1
+ ---
2
+ id: log-timestamps-mislabeled-utc
3
+ board: code
4
+ section: health
5
+ status: planned
6
+ category: Observability · Diagnostics
7
+ complexity: S
8
+ impact: Med
9
+ wow: 2
10
+ note: converter = time.gmtime
11
+ order: 10
12
+ owner:
13
+ pr:
14
+ title: Log timestamps are local time mislabeled <code>Z</code>
15
+ ---
16
+ <code>core/logs.py</code> builds the <code>logging.Formatter</code> with
17
+ <code>datefmt="%Y-%m-%dT%H:%M:%SZ"</code> but never sets
18
+ <code>converter = time.gmtime</code>, so <code>%(asctime)s</code> uses
19
+ <em>local</em> time while stamping a literal <code>Z</code> (UTC)
20
+ suffix. Every line in <code>~/.boost/logs/boost.log</code> is therefore
21
+ off by the machine's UTC offset — which nearly caused a 5-hour
22
+ mis-correlation when matching the log against an OS crash report. Set
23
+ the formatter's <code>converter</code> to <code>time.gmtime</code> (or
24
+ drop the <code>Z</code>) so the trail is honestly UTC, making the
25
+ pid/ppid crash-correlation breadcrumbs trustworthy.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: make-the-roadmaps-discoverable
3
+ board: code
4
+ section: docsite
5
+ status: shipped
6
+ category: Docs · Discoverability
7
+ complexity: S
8
+ impact: Med
9
+ wow: 3
10
+ note: nav + README links
11
+ order: 1
12
+ owner: loop/roadmaps-discoverable
13
+ pr: 101
14
+ title: Make the roadmaps discoverable
15
+ ---
16
+ The living roadmaps were unreachable unless you knew the URL:
17
+ <code>design-roadmap.html</code> was linked nowhere and the README had no
18
+ roadmap link at all. The Visual Guide nav now carries both boards (a
19
+ <code>Design&nbsp;↗</code> entry beside the existing <code>Roadmap&nbsp;↗</code>),
20
+ and the README opens with a <b>Roadmap</b> section linking the code and design
21
+ boards plus the Visual Guide — so the two data-driven boards are one click away
22
+ and the work stays visible.
@@ -0,0 +1,26 @@
1
+ ---
2
+ id: mcp-launch-objc-fork-safety
3
+ board: code
4
+ section: compat
5
+ status: planned
6
+ category: Compatibility · macOS
7
+ complexity: S
8
+ impact: Med
9
+ wow: 3
10
+ note: OBJC_DISABLE_INITIALIZE_FORK_SAFETY
11
+ order: 9
12
+ owner:
13
+ pr:
14
+ title: Harden <code>boost mcp</code> launch against macOS Obj-C fork aborts
15
+ ---
16
+ On macOS, a host that spawns <code>boost mcp --stdio</code> via <code>fork()</code>
17
+ can abort on the child side pre-<code>exec</code> when Obj-C is touched
18
+ post-fork (CFPreferences / <code>_scproxy</code> proxy lookup) — the
19
+ classic <em>"crashed on child side of fork pre-exec"</em>
20
+ <code>SIGABRT</code>. Not boost's own code (it aborts before boost
21
+ runs), but boost can make its integration robust: when registering the
22
+ MCP server (<code>boost mcp register</code> / the emitted client
23
+ config), set <code>OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES</code> (and
24
+ <code>no_proxy=*</code>) in the launch environment so the host's fork
25
+ into boost can't trip the Obj-C fork-safety abort. Document it for
26
+ hosts that launch boost directly.
@@ -0,0 +1,29 @@
1
+ ---
2
+ id: rule-install-native-materialization
3
+ board: code
4
+ section: internals
5
+ status: planned
6
+ category: Install engine · Rules
7
+ complexity: L
8
+ impact: High
9
+ wow: 4
10
+ note: rules are indexed but never installed
11
+ order: 21
12
+ owner:
13
+ pr:
14
+ title: Rule install — materialize rules into each agent's native format
15
+ ---
16
+ Today <code>store.install</code> refuses every non-skill kind
17
+ (<em>"rules and workflows show up in <code>boost search</code>/<code>boost taps</code>
18
+ for now"</em>), so rules are indexed for discovery but land nowhere —
19
+ there is no <code>boost install</code> path for a rule. Add one that
20
+ writes each rule into the form the target agent actually reads, since
21
+ there is no single cross-agent "rules folder": Cursor/Windsurf/Cline
22
+ consume a rules directory (<code>.cursorrules</code> /
23
+ <code>.windsurfrules</code> / <code>.clinerules</code> / <code>.mdc</code>),
24
+ but <strong>Claude Code has no rules folder</strong> — its standing
25
+ rules are <code>CLAUDE.md</code>. So installing a rule for Claude means
26
+ merging it into <code>CLAUDE.md</code> (a managed, idempotent block),
27
+ while for the others it means dropping the file into their rules dir.
28
+ Needs a store/lock model for rules (uninstall must cleanly remove the
29
+ merged block), mirroring how skills symlink into <code>enabled_agents()</code>.
@@ -2,15 +2,15 @@
2
2
  id: typo-detection-codespell
3
3
  board: code
4
4
  section: dx
5
- status: planned
5
+ status: shipped
6
6
  category: Quality · Docs
7
7
  complexity: S
8
8
  impact: Med
9
9
  wow: 2
10
10
  note: user-facing text
11
11
  order: 4
12
- owner:
13
- pr:
12
+ owner: loop/codespell-gate
13
+ pr: 100
14
14
  title: Typo detection — <code>codespell</code>
15
15
  ---
16
16
  Cheap, high-signal for a project this documentation-heavy: scan the
@@ -118,7 +118,7 @@
118
118
  <div class="stat"><b>10</b><span>Shipped</span></div>
119
119
  <div class="stat"><b>3</b><span>Next up</span></div>
120
120
  <div class="stat"><b>4</b><span>Planned</span></div>
121
- <div class="stat"><b>85</b><span>Loop finds</span></div>
121
+ <div class="stat"><b>88</b><span>Loop finds</span></div>
122
122
  <!-- /ROADMAP:stats -->
123
123
  </div>
124
124
  </section>
@@ -615,6 +615,31 @@
615
615
  <span class="m">Wow <b class="wow">★</b></span>
616
616
  </div>
617
617
  </article>
618
+
619
+ <article class="cap rcard">
620
+ <div class="head"><span class="pill planned">Planned</span><span class="cat">Install engine · Rules</span></div>
621
+ <h3>Rule install — materialize rules into each agent's native format</h3>
622
+ <p>Today <code>store.install</code> refuses every non-skill kind
623
+ (<em>"rules and workflows show up in <code>boost search</code>/<code>boost taps</code>
624
+ for now"</em>), so rules are indexed for discovery but land nowhere —
625
+ there is no <code>boost install</code> path for a rule. Add one that
626
+ writes each rule into the form the target agent actually reads, since
627
+ there is no single cross-agent "rules folder": Cursor/Windsurf/Cline
628
+ consume a rules directory (<code>.cursorrules</code> /
629
+ <code>.windsurfrules</code> / <code>.clinerules</code> / <code>.mdc</code>),
630
+ but <strong>Claude Code has no rules folder</strong> — its standing
631
+ rules are <code>CLAUDE.md</code>. So installing a rule for Claude means
632
+ merging it into <code>CLAUDE.md</code> (a managed, idempotent block),
633
+ while for the others it means dropping the file into their rules dir.
634
+ Needs a store/lock model for rules (uninstall must cleanly remove the
635
+ merged block), mirroring how skills symlink into <code>enabled_agents()</code>.</p>
636
+ <div class="meta">
637
+ <span class="m">Complexity <b>L</b></span>
638
+ <span class="m hi">Impact <b>High</b></span>
639
+ <span class="m">Wow <b class="wow">★★★★</b></span>
640
+ <span class="m">rules are indexed but never installed</span>
641
+ </div>
642
+ </article>
618
643
  <!-- /ROADMAP:cards -->
619
644
 
620
645
  </div>
@@ -784,6 +809,27 @@
784
809
  <span class="m">avoid macOS _scproxy Obj-C path</span>
785
810
  </div>
786
811
  </article>
812
+
813
+ <article class="cap rcard">
814
+ <div class="head"><span class="pill planned">Planned</span><span class="cat">Observability · Diagnostics</span></div>
815
+ <h3>Log timestamps are local time mislabeled <code>Z</code></h3>
816
+ <p><code>core/logs.py</code> builds the <code>logging.Formatter</code> with
817
+ <code>datefmt="%Y-%m-%dT%H:%M:%SZ"</code> but never sets
818
+ <code>converter = time.gmtime</code>, so <code>%(asctime)s</code> uses
819
+ <em>local</em> time while stamping a literal <code>Z</code> (UTC)
820
+ suffix. Every line in <code>~/.boost/logs/boost.log</code> is therefore
821
+ off by the machine's UTC offset — which nearly caused a 5-hour
822
+ mis-correlation when matching the log against an OS crash report. Set
823
+ the formatter's <code>converter</code> to <code>time.gmtime</code> (or
824
+ drop the <code>Z</code>) so the trail is honestly UTC, making the
825
+ pid/ppid crash-correlation breadcrumbs trustworthy.</p>
826
+ <div class="meta">
827
+ <span class="m">Complexity <b>S</b></span>
828
+ <span class="m">Impact <b>Med</b></span>
829
+ <span class="m">Wow <b class="wow">★★</b></span>
830
+ <span class="m">converter = time.gmtime</span>
831
+ </div>
832
+ </article>
787
833
  <!-- /ROADMAP:cards -->
788
834
 
789
835
  </div>
@@ -991,7 +1037,7 @@
991
1037
  </article>
992
1038
 
993
1039
  <article class="cap rcard">
994
- <div class="head"><span class="pill planned">Planned</span><span class="cat">Quality · Docs</span></div>
1040
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Quality · Docs</span></div>
995
1041
  <h3>Typo detection — <code>codespell</code></h3>
996
1042
  <p>Cheap, high-signal for a project this documentation-heavy: scan the
997
1043
  README, <code>docs/*.html</code>, docstrings and every user-facing CLI
@@ -1097,18 +1143,20 @@
1097
1143
 
1098
1144
  <!-- ROADMAP:cards section=docsite -->
1099
1145
  <article class="cap rcard">
1100
- <div class="head"><span class="pill next">Next</span><span class="cat">Docs · Discoverability</span></div>
1146
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Docs · Discoverability</span></div>
1101
1147
  <h3>Make the roadmaps discoverable</h3>
1102
- <p>Neither <code>roadmap.html</code> nor <code>design-roadmap.html</code> is
1103
- linked from <code>docs/index.html</code> or the README — the living
1104
- roadmaps are unreachable unless you already know the URL. Add nav entries
1105
- on the Visual Guide and a "Roadmap" link in the README so the two boards
1106
- are one click away and the work stays visible.</p>
1148
+ <p>The living roadmaps were unreachable unless you knew the URL:
1149
+ <code>design-roadmap.html</code> was linked nowhere and the README had no
1150
+ roadmap link at all. The Visual Guide nav now carries both boards (a
1151
+ <code>Design&nbsp;↗</code> entry beside the existing <code>Roadmap&nbsp;↗</code>),
1152
+ and the README opens with a <b>Roadmap</b> section linking the code and design
1153
+ boards plus the Visual Guide — so the two data-driven boards are one click away
1154
+ and the work stays visible.</p>
1107
1155
  <div class="meta">
1108
1156
  <span class="m">Complexity <b>S</b></span>
1109
1157
  <span class="m">Impact <b>Med</b></span>
1110
1158
  <span class="m">Wow <b class="wow">★★★</b></span>
1111
- <span class="m">2 nav links</span>
1159
+ <span class="m">nav + README links</span>
1112
1160
  </div>
1113
1161
  </article>
1114
1162
 
@@ -1399,6 +1447,28 @@
1399
1447
  <span class="m">local == CI</span>
1400
1448
  </div>
1401
1449
  </article>
1450
+
1451
+ <article class="cap rcard">
1452
+ <div class="head"><span class="pill planned">Planned</span><span class="cat">Compatibility · macOS</span></div>
1453
+ <h3>Harden <code>boost mcp</code> launch against macOS Obj-C fork aborts</h3>
1454
+ <p>On macOS, a host that spawns <code>boost mcp --stdio</code> via <code>fork()</code>
1455
+ can abort on the child side pre-<code>exec</code> when Obj-C is touched
1456
+ post-fork (CFPreferences / <code>_scproxy</code> proxy lookup) — the
1457
+ classic <em>"crashed on child side of fork pre-exec"</em>
1458
+ <code>SIGABRT</code>. Not boost's own code (it aborts before boost
1459
+ runs), but boost can make its integration robust: when registering the
1460
+ MCP server (<code>boost mcp register</code> / the emitted client
1461
+ config), set <code>OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES</code> (and
1462
+ <code>no_proxy=*</code>) in the launch environment so the host's fork
1463
+ into boost can't trip the Obj-C fork-safety abort. Document it for
1464
+ hosts that launch boost directly.</p>
1465
+ <div class="meta">
1466
+ <span class="m">Complexity <b>S</b></span>
1467
+ <span class="m">Impact <b>Med</b></span>
1468
+ <span class="m">Wow <b class="wow">★★★</b></span>
1469
+ <span class="m">OBJC_DISABLE_INITIALIZE_FORK_SAFETY</span>
1470
+ </div>
1471
+ </article>
1402
1472
  <!-- /ROADMAP:cards -->
1403
1473
 
1404
1474
  </div>
@@ -63,6 +63,13 @@ target-version = "py39"
63
63
  # short throwaway names and lambda helpers are fine in tests
64
64
  "tests/*" = ["E741", "E731"]
65
65
 
66
+ [tool.codespell]
67
+ # Spell-check user-facing text (see `make lint`: boost_cli, docs, README).
68
+ # Generated boards and the setuptools-scm version stub aren't ours to check.
69
+ skip = "docs/roadmap.html,docs/design-roadmap.html,boost_cli/_version.py,*.tar.gz"
70
+ # Valid English that codespell's dictionary flags as misspellings.
71
+ ignore-words-list = "unparseable,accreting"
72
+
66
73
  [tool.mypy]
67
74
  python_version = "3.9"
68
75
  files = ["boost_cli"]
@@ -1,20 +0,0 @@
1
- ---
2
- id: make-the-roadmaps-discoverable
3
- board: code
4
- section: docsite
5
- status: next
6
- category: Docs · Discoverability
7
- complexity: S
8
- impact: Med
9
- wow: 3
10
- note: 2 nav links
11
- order: 1
12
- owner:
13
- pr:
14
- title: Make the roadmaps discoverable
15
- ---
16
- Neither <code>roadmap.html</code> nor <code>design-roadmap.html</code> is
17
- linked from <code>docs/index.html</code> or the README — the living
18
- roadmaps are unreachable unless you already know the URL. Add nav entries
19
- on the Visual Guide and a "Roadmap" link in the README so the two boards
20
- are one click away and the work stays visible.
File without changes