wealthbox-cli 1.5.0__tar.gz → 2.0.0__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 (150) hide show
  1. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/.github/workflows/ci.yml +13 -1
  2. wealthbox_cli-2.0.0/.github/workflows/release-binaries.yml +220 -0
  3. wealthbox_cli-1.5.0/docs/changelog.md → wealthbox_cli-2.0.0/CHANGELOG.md +66 -45
  4. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/PKG-INFO +7 -14
  5. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/README.md +6 -13
  6. wealthbox_cli-2.0.0/docs/agents/domain.md +51 -0
  7. wealthbox_cli-2.0.0/docs/agents/issue-tracker.md +22 -0
  8. wealthbox_cli-2.0.0/docs/agents/triage-labels.md +15 -0
  9. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/mkdocs.yml +0 -1
  10. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/pyproject.toml +1 -1
  11. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/__init__.py +9 -0
  12. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/_config.py +24 -0
  13. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/_skill_bootstrap.py +23 -6
  14. wealthbox_cli-2.0.0/src/wealthbox_tools/cli/_skill_platforms.py +109 -0
  15. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/_util.py +17 -0
  16. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/doctor.py +89 -21
  17. wealthbox_cli-2.0.0/src/wealthbox_tools/cli/firm.py +158 -0
  18. wealthbox_cli-2.0.0/src/wealthbox_tools/cli/internals.py +37 -0
  19. wealthbox_cli-2.0.0/src/wealthbox_tools/cli/main.py +138 -0
  20. wealthbox_cli-2.0.0/src/wealthbox_tools/cli/prefs.py +44 -0
  21. wealthbox_cli-2.0.0/src/wealthbox_tools/cli/self_cmd.py +61 -0
  22. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/skills.py +10 -13
  23. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/workflows.py +53 -3
  24. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/base.py +12 -1
  25. wealthbox_cli-2.0.0/src/wealthbox_tools/firm/__init__.py +31 -0
  26. wealthbox_cli-2.0.0/src/wealthbox_tools/firm/archive.py +499 -0
  27. wealthbox_cli-2.0.0/src/wealthbox_tools/firm/diff.py +233 -0
  28. wealthbox_cli-2.0.0/src/wealthbox_tools/internals/__init__.py +6 -0
  29. wealthbox_cli-2.0.0/src/wealthbox_tools/internals/skill_ref_gen.py +433 -0
  30. wealthbox_cli-2.0.0/src/wealthbox_tools/self_upgrade.py +680 -0
  31. {wealthbox_cli-1.5.0/plugins/wealthbox-crm → wealthbox_cli-2.0.0/src/wealthbox_tools}/skills/wealthbox-crm/SKILL.md +42 -1
  32. {wealthbox_cli-1.5.0/plugins/wealthbox-crm → wealthbox_cli-2.0.0/src/wealthbox_tools}/skills/wealthbox-crm/bootstrap.md +7 -0
  33. wealthbox_cli-2.0.0/src/wealthbox_tools/skills/wealthbox-crm/references/contacts.md +519 -0
  34. wealthbox_cli-2.0.0/src/wealthbox_tools/skills/wealthbox-crm/references/events.md +241 -0
  35. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/skills/wealthbox-crm/references/households.md +51 -0
  36. wealthbox_cli-2.0.0/src/wealthbox_tools/skills/wealthbox-crm/references/notes.md +157 -0
  37. wealthbox_cli-2.0.0/src/wealthbox_tools/skills/wealthbox-crm/references/opportunities.md +212 -0
  38. wealthbox_cli-2.0.0/src/wealthbox_tools/skills/wealthbox-crm/references/projects.md +143 -0
  39. wealthbox_cli-2.0.0/src/wealthbox_tools/skills/wealthbox-crm/references/tasks.md +251 -0
  40. wealthbox_cli-2.0.0/src/wealthbox_tools/skills/wealthbox-crm/references/workflows.md +310 -0
  41. wealthbox_cli-1.5.0/.claude-plugin/marketplace.json +0 -25
  42. wealthbox_cli-1.5.0/.codex-plugin/plugin.json +0 -16
  43. wealthbox_cli-1.5.0/codex-skill/wealthbox-crm/SKILL.md +0 -156
  44. wealthbox_cli-1.5.0/codex-skill/wealthbox-crm/bootstrap.md +0 -127
  45. wealthbox_cli-1.5.0/codex-skill/wealthbox-crm/references/contacts.md +0 -155
  46. wealthbox_cli-1.5.0/codex-skill/wealthbox-crm/references/events.md +0 -88
  47. wealthbox_cli-1.5.0/codex-skill/wealthbox-crm/references/households.md +0 -40
  48. wealthbox_cli-1.5.0/codex-skill/wealthbox-crm/references/notes.md +0 -67
  49. wealthbox_cli-1.5.0/codex-skill/wealthbox-crm/references/opportunities.md +0 -87
  50. wealthbox_cli-1.5.0/codex-skill/wealthbox-crm/references/projects.md +0 -60
  51. wealthbox_cli-1.5.0/codex-skill/wealthbox-crm/references/tasks.md +0 -106
  52. wealthbox_cli-1.5.0/codex-skill/wealthbox-crm/references/workflows.md +0 -90
  53. wealthbox_cli-1.5.0/plugins/wealthbox-crm/.claude-plugin/plugin.json +0 -17
  54. wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/firm-examples/contacts.md +0 -21
  55. wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/firm-examples/events.md +0 -9
  56. wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/firm-examples/notes.md +0 -5
  57. wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/firm-examples/opportunities.md +0 -12
  58. wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/firm-examples/projects.md +0 -5
  59. wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/firm-examples/tasks.md +0 -14
  60. wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/firm-examples/workflows.md +0 -31
  61. wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/references/contacts.md +0 -155
  62. wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/references/events.md +0 -88
  63. wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/references/households.md +0 -40
  64. wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/references/lookups.md +0 -78
  65. wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/references/notes.md +0 -67
  66. wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/references/opportunities.md +0 -87
  67. wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/references/projects.md +0 -60
  68. wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/references/tasks.md +0 -106
  69. wealthbox_cli-1.5.0/plugins/wealthbox-crm/skills/wealthbox-crm/references/workflows.md +0 -90
  70. wealthbox_cli-1.5.0/src/wealthbox_tools/cli/_skill_platforms.py +0 -235
  71. wealthbox_cli-1.5.0/src/wealthbox_tools/cli/main.py +0 -62
  72. wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/SKILL.md +0 -156
  73. wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/bootstrap.md +0 -127
  74. wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/contacts.md +0 -21
  75. wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/events.md +0 -9
  76. wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/notes.md +0 -5
  77. wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/opportunities.md +0 -12
  78. wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/projects.md +0 -5
  79. wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/tasks.md +0 -14
  80. wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/firm-examples/workflows.md +0 -31
  81. wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/references/contacts.md +0 -155
  82. wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/references/events.md +0 -88
  83. wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/references/lookups.md +0 -78
  84. wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/references/notes.md +0 -67
  85. wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/references/opportunities.md +0 -87
  86. wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/references/projects.md +0 -60
  87. wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/references/tasks.md +0 -106
  88. wealthbox_cli-1.5.0/src/wealthbox_tools/skills/wealthbox-crm/references/workflows.md +0 -90
  89. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/.env.example +0 -0
  90. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/.github/workflows/docs.yml +0 -0
  91. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/.gitignore +0 -0
  92. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/CONTRIBUTING.md +0 -0
  93. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/LICENSE +0 -0
  94. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/SECURITY.md +0 -0
  95. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/docs/cli-reference.md +0 -0
  96. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/docs/getting-started.md +0 -0
  97. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/docs/index.md +0 -0
  98. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/docs/overrides/main.html +0 -0
  99. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/docs/promotion.md +0 -0
  100. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/__init__.py +0 -0
  101. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/_skill_paths.py +0 -0
  102. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/activity.py +0 -0
  103. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/categories.py +0 -0
  104. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/config.py +0 -0
  105. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/contacts.py +0 -0
  106. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/events.py +0 -0
  107. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/households.py +0 -0
  108. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/me.py +0 -0
  109. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/notes.py +0 -0
  110. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/opportunities.py +0 -0
  111. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/projects.py +0 -0
  112. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/tasks.py +0 -0
  113. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/cli/users.py +0 -0
  114. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/__init__.py +0 -0
  115. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/activity.py +0 -0
  116. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/categories.py +0 -0
  117. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/comments.py +0 -0
  118. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/contacts.py +0 -0
  119. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/events.py +0 -0
  120. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/households.py +0 -0
  121. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/me.py +0 -0
  122. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/notes.py +0 -0
  123. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/opportunities.py +0 -0
  124. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/projects.py +0 -0
  125. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/tasks.py +0 -0
  126. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/users.py +0 -0
  127. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/client/workflows.py +0 -0
  128. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/__init__.py +0 -0
  129. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/activity.py +0 -0
  130. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/comments.py +0 -0
  131. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/common.py +0 -0
  132. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/contacts.py +0 -0
  133. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/custom_fields.py +0 -0
  134. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/enums.py +0 -0
  135. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/events.py +0 -0
  136. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/households.py +0 -0
  137. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/notes.py +0 -0
  138. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/opportunities.py +0 -0
  139. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/projects.py +0 -0
  140. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/tasks.py +0 -0
  141. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/models/workflows.py +0 -0
  142. {wealthbox_cli-1.5.0 → wealthbox_cli-2.0.0}/src/wealthbox_tools/py.typed +0 -0
  143. {wealthbox_cli-1.5.0/codex-skill → wealthbox_cli-2.0.0/src/wealthbox_tools/skills}/wealthbox-crm/firm-examples/contacts.md +0 -0
  144. {wealthbox_cli-1.5.0/codex-skill → wealthbox_cli-2.0.0/src/wealthbox_tools/skills}/wealthbox-crm/firm-examples/events.md +0 -0
  145. {wealthbox_cli-1.5.0/codex-skill → wealthbox_cli-2.0.0/src/wealthbox_tools/skills}/wealthbox-crm/firm-examples/notes.md +0 -0
  146. {wealthbox_cli-1.5.0/codex-skill → wealthbox_cli-2.0.0/src/wealthbox_tools/skills}/wealthbox-crm/firm-examples/opportunities.md +0 -0
  147. {wealthbox_cli-1.5.0/codex-skill → wealthbox_cli-2.0.0/src/wealthbox_tools/skills}/wealthbox-crm/firm-examples/projects.md +0 -0
  148. {wealthbox_cli-1.5.0/codex-skill → wealthbox_cli-2.0.0/src/wealthbox_tools/skills}/wealthbox-crm/firm-examples/tasks.md +0 -0
  149. {wealthbox_cli-1.5.0/codex-skill → wealthbox_cli-2.0.0/src/wealthbox_tools/skills}/wealthbox-crm/firm-examples/workflows.md +0 -0
  150. {wealthbox_cli-1.5.0/codex-skill → wealthbox_cli-2.0.0/src/wealthbox_tools/skills}/wealthbox-crm/references/lookups.md +0 -0
@@ -31,8 +31,20 @@ jobs:
31
31
  - run: pip install -e ".[dev]"
32
32
  - run: pytest
33
33
 
34
- publish:
34
+ skill-ref-drift:
35
35
  needs: [lint, test]
36
+ runs-on: ubuntu-latest
37
+ steps:
38
+ - uses: actions/checkout@v4
39
+ - uses: actions/setup-python@v5
40
+ with:
41
+ python-version: "3.12"
42
+ - run: pip install -e ".[dev]"
43
+ - run: wbox internals regen-skill-refs
44
+ - run: git diff --exit-code -- src/wealthbox_tools/skills/wealthbox-crm/references/
45
+
46
+ publish:
47
+ needs: [lint, test, skill-ref-drift]
36
48
  if: startsWith(github.ref, 'refs/tags/v')
37
49
  runs-on: ubuntu-latest
38
50
  permissions:
@@ -0,0 +1,220 @@
1
+ # Per-platform PyInstaller build + GitHub Release upload.
2
+ #
3
+ # Triggered on v* tags (and manually via workflow_dispatch for fork
4
+ # validation). Builds a single-file ``wbox`` binary for each of the four
5
+ # supported targets, computes its SHA-256, and uploads the binaries plus
6
+ # a combined manifest as assets on the GitHub Release for the tag.
7
+ #
8
+ # The PyPI publish job lives in ci.yml and is intentionally not touched
9
+ # here — both workflows fire on ``v*`` tags but operate independently.
10
+ #
11
+ # ----------------------------------------------------------------------
12
+ # Manifest contract (LOCKED — downstream consumers: issue #42 install.sh
13
+ # rewrite, issue #43 install.ps1 parity)
14
+ # ----------------------------------------------------------------------
15
+ # Manifest filename: SHA256SUMS.txt
16
+ # Format: standard sha256sum-compatible. One record per line:
17
+ # <hex-sha256><two-spaces><filename>
18
+ # Sort order: ASCII-sorted by filename (stable across runs)
19
+ # Binary filenames:
20
+ # wbox-linux-x64
21
+ # wbox-macos-arm64
22
+ # wbox-macos-x64
23
+ # wbox-windows-x64.exe
24
+ # Manifest assets are attached to the same GitHub Release as the four
25
+ # binaries. Install scripts can fetch SHA256SUMS.txt and a single binary
26
+ # from the same release URL prefix and verify the binary against the
27
+ # matching line.
28
+ # ----------------------------------------------------------------------
29
+
30
+ name: Release Binaries
31
+
32
+ on:
33
+ push:
34
+ tags: ["v*"]
35
+ workflow_dispatch: {}
36
+
37
+ permissions:
38
+ contents: read
39
+
40
+ jobs:
41
+ build:
42
+ name: Build ${{ matrix.target }}
43
+ runs-on: ${{ matrix.os }}
44
+ strategy:
45
+ fail-fast: false
46
+ matrix:
47
+ include:
48
+ - os: ubuntu-latest
49
+ target: linux-x64
50
+ binary: wbox-linux-x64
51
+ - os: macos-15-intel # Intel runner (x86_64) — macos-13 was retired Dec 2025
52
+ target: macos-x64
53
+ binary: wbox-macos-x64
54
+ - os: macos-14 # Apple Silicon runner (arm64)
55
+ target: macos-arm64
56
+ binary: wbox-macos-arm64
57
+ - os: windows-latest
58
+ target: windows-x64
59
+ binary: wbox-windows-x64.exe
60
+ steps:
61
+ - name: Checkout
62
+ uses: actions/checkout@v4
63
+
64
+ - name: Set up Python
65
+ uses: actions/setup-python@v5
66
+ with:
67
+ python-version: "3.12"
68
+
69
+ - name: Install runtime + build deps
70
+ run: |
71
+ python -m pip install --upgrade pip
72
+ pip install .
73
+ pip install pyinstaller
74
+
75
+ - name: Build single-file binary (Unix)
76
+ if: runner.os != 'Windows'
77
+ shell: bash
78
+ run: |
79
+ pyinstaller \
80
+ --onefile \
81
+ --name "${{ matrix.binary }}" \
82
+ --noconfirm \
83
+ --collect-data wealthbox_tools \
84
+ --copy-metadata wealthbox-cli \
85
+ scripts/wbox_entry.py
86
+ test -f "dist/${{ matrix.binary }}"
87
+ chmod +x "dist/${{ matrix.binary }}"
88
+
89
+ - name: Build single-file binary (Windows)
90
+ if: runner.os == 'Windows'
91
+ shell: pwsh
92
+ run: |
93
+ pyinstaller `
94
+ --onefile `
95
+ --name "${{ matrix.binary }}" `
96
+ --noconfirm `
97
+ --collect-data wealthbox_tools `
98
+ --copy-metadata wealthbox-cli `
99
+ scripts/wbox_entry.py
100
+ if (-not (Test-Path "dist/${{ matrix.binary }}")) {
101
+ throw "expected dist/${{ matrix.binary }} to exist"
102
+ }
103
+
104
+ - name: Smoke-test binary
105
+ # `--version` only proves the entry point runs. `skills install`
106
+ # exercises bundled package data — it reads
107
+ # wealthbox_tools/skills/wealthbox-crm via importlib.resources — so
108
+ # this fails loudly if --collect-data wealthbox_tools didn't bundle
109
+ # the skill template. Runs against the fresh runner HOME with
110
+ # --no-bootstrap to skip the post-install confirm prompt.
111
+ run: |
112
+ ./dist/${{ matrix.binary }} --version
113
+ ./dist/${{ matrix.binary }} skills install --platform claude-code-user --no-bootstrap
114
+
115
+ - name: Compute SHA-256 (Unix)
116
+ if: runner.os != 'Windows'
117
+ shell: bash
118
+ working-directory: dist
119
+ run: |
120
+ if command -v sha256sum >/dev/null 2>&1; then
121
+ sha256sum "${{ matrix.binary }}" > "${{ matrix.binary }}.sha256"
122
+ else
123
+ # macOS: shasum -a 256 emits sha256sum-compatible "<hash> <name>"
124
+ shasum -a 256 "${{ matrix.binary }}" > "${{ matrix.binary }}.sha256"
125
+ fi
126
+ cat "${{ matrix.binary }}.sha256"
127
+
128
+ - name: Compute SHA-256 (Windows)
129
+ if: runner.os == 'Windows'
130
+ shell: pwsh
131
+ working-directory: dist
132
+ run: |
133
+ $hash = (Get-FileHash -Algorithm SHA256 "${{ matrix.binary }}").Hash.ToLower()
134
+ # sha256sum format: "<hex> <filename>" (two spaces, LF line ending)
135
+ $line = "$hash ${{ matrix.binary }}`n"
136
+ [System.IO.File]::WriteAllText(
137
+ (Join-Path $PWD "${{ matrix.binary }}.sha256"),
138
+ $line
139
+ )
140
+ Get-Content "${{ matrix.binary }}.sha256"
141
+
142
+ - name: Upload build artifact
143
+ uses: actions/upload-artifact@v4
144
+ with:
145
+ name: wbox-${{ matrix.target }}
146
+ path: |
147
+ dist/${{ matrix.binary }}
148
+ dist/${{ matrix.binary }}.sha256
149
+ if-no-files-found: error
150
+ retention-days: 7
151
+
152
+ manifest-and-release:
153
+ name: Combine manifest and upload to release
154
+ needs: [build]
155
+ runs-on: ubuntu-latest
156
+ permissions:
157
+ contents: write
158
+ steps:
159
+ - name: Download all build artifacts
160
+ uses: actions/download-artifact@v4
161
+ with:
162
+ path: artifacts
163
+
164
+ - name: Stage release files
165
+ shell: bash
166
+ run: |
167
+ mkdir -p release
168
+ # Each artifact directory contains one binary + one .sha256 file.
169
+ find artifacts -type f \( -name 'wbox-*' -a ! -name '*.sha256' \) -exec cp -v {} release/ \;
170
+ find artifacts -type f -name '*.sha256' -exec cp -v {} release/ \;
171
+ ls -la release
172
+
173
+ - name: Build combined SHA256SUMS.txt
174
+ shell: bash
175
+ working-directory: release
176
+ run: |
177
+ # Concatenate per-binary sums into a single sha256sum-compatible
178
+ # manifest, ASCII-sorted by filename for stability.
179
+ # Each .sha256 file is already in "<hex> <filename>" form.
180
+ cat *.sha256 | LC_ALL=C sort -k 2 > SHA256SUMS.txt
181
+ echo "----- SHA256SUMS.txt -----"
182
+ cat SHA256SUMS.txt
183
+ echo "--------------------------"
184
+ # Verify the manifest against the staged binaries as a sanity check.
185
+ sha256sum -c SHA256SUMS.txt
186
+
187
+ - name: Upload combined manifest artifact
188
+ uses: actions/upload-artifact@v4
189
+ with:
190
+ name: SHA256SUMS
191
+ path: release/SHA256SUMS.txt
192
+ if-no-files-found: error
193
+
194
+ - name: Upload assets to GitHub Release
195
+ if: startsWith(github.ref, 'refs/tags/')
196
+ env:
197
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
198
+ TAG: ${{ github.ref_name }}
199
+ GH_REPO: ${{ github.repository }}
200
+ shell: bash
201
+ working-directory: release
202
+ run: |
203
+ # Ensure a release exists for the tag. If the PyPI publish job in
204
+ # ci.yml or a manual release-create created it first, --clobber on
205
+ # upload handles re-runs cleanly.
206
+ if ! gh release view "$TAG" >/dev/null 2>&1; then
207
+ gh release create "$TAG" \
208
+ --title "$TAG" \
209
+ --notes "Automated release for $TAG. Binaries built by release-binaries.yml; PyPI wheel published by ci.yml."
210
+ fi
211
+ # Upload all four binaries + the combined manifest. Per-platform
212
+ # .sha256 sidecars are intentionally not uploaded — SHA256SUMS.txt
213
+ # is the single source of truth for installers.
214
+ gh release upload "$TAG" \
215
+ wbox-linux-x64 \
216
+ wbox-macos-arm64 \
217
+ wbox-macos-x64 \
218
+ wbox-windows-x64.exe \
219
+ SHA256SUMS.txt \
220
+ --clobber
@@ -1,12 +1,67 @@
1
1
  # Changelog
2
2
 
3
- All notable changes to **wealthbox-cli** are documented here.
3
+ All notable changes to `wealthbox-cli` are documented here. The format follows
4
+ [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project
5
+ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [2.0.0] - 2026-05-09
8
+
9
+ v2 retires the Claude marketplace plugin distribution and ships `wbox` as a
10
+ standalone binary plus a PyPI package. Existing v1 users must reinstall via the
11
+ new bootstrap script or `pip install wealthbox-cli` — see Breaking below.
12
+
13
+ ### Breaking
14
+ - **Retired the Claude marketplace plugin distribution.** `wbox` no longer
15
+ ships through the Claude marketplace. Install via `pip install wealthbox-cli`
16
+ or the bootstrap script (`curl -fsSL https://github.com/massive-value/wealthbox-cli/releases/latest/download/install.sh | sh`).
17
+ v1's `claude plugin install` flow is gone.
18
+ - **Rewrote `install.sh` and `install.ps1`** to fetch a prebuilt binary from
19
+ GitHub Releases instead of detecting and preferring the Claude marketplace
20
+ plugin (#42, #43). The installers now verify a checksum manifest before
21
+ swapping the binary into place.
22
+ - **Removed v1 distribution artifacts** — the in-repo plugin manifest and
23
+ marketplace metadata are deleted (#27).
24
+ - **Dropped plugin-cache scanning** from the skill platform helpers; `wbox
25
+ doctor` and `wbox skills list` no longer probe Claude's plugin cache (#28).
4
26
 
5
- This project uses [Semantic Versioning](https://semver.org/).
27
+ ### Added
28
+ - `wbox firm export` — end-to-end export of the configured firm's CRM data to
29
+ a portable JSON snapshot (#31).
30
+ - `wbox firm import` with `--mode overwrite|merge|abort-on-conflict` and
31
+ `--from-url` for fetching a snapshot directly from a URL (#36, #46, #45).
32
+ - `wbox firm diff` — diff a local snapshot against the live firm to preview
33
+ what an import would change (#47).
34
+ - Post-import provenance metadata and a 90-day freshness warning surfaced by
35
+ `wbox doctor` (#48).
36
+ - `wbox doctor` promoted to a top-level command, with a warning when the local
37
+ install is more than 30 days behind the latest GitHub release (#41).
38
+ - `wbox self upgrade` — happy-path binary self-update (#32), Windows
39
+ deferred-swap support (#67), and a subprocess hand-off so a fresh `wbox`
40
+ upgrades bundled skills after the binary swap (#40).
41
+ - `wbox prefs` — user-preferences slot for per-user defaults (#29).
42
+ - Per-platform PyInstaller build + release workflow that publishes Linux,
43
+ macOS, and Windows binaries plus a checksum manifest to GitHub Releases (#33).
44
+ - Skill-reference auto-generation markers across the bundled skill (#30, #85)
45
+ and a CI drift-detection job that fails when generated skill blocks fall out
46
+ of sync (#86).
47
+ - Bootstrap Q&A skips the onboarding prompts when an imported firm snapshot
48
+ already carries an `onboarded_at` timestamp (#49).
49
+ - `wbox firm apply` and `wbox doctor` now sweep stale `.old.<ts>` backup files
50
+ left behind by interrupted upgrades (#39).
51
+
52
+ ### Changed
53
+ - Rewrote the README around the v2 install flow — bootstrap script first, PyPI
54
+ second, no marketplace path (#83).
55
+ - Documented the three-layer config resolution (flag > env > config file) and
56
+ the new `prefs` commands inside the bundled skill (#34).
6
57
 
7
- ---
58
+ ### Fixed
59
+ - `wbox self upgrade` now reads the checksum manifest under its release-asset
60
+ filename, fixing the post-#33 break (#82).
61
+ - Pytest no longer clobbers the developer's real `~/.wbox_rate_limit.json`;
62
+ the rate-limit state file is isolated per test session (#56).
8
63
 
9
- ## [1.3.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.3.0) 2026-05-03
64
+ ## [1.3.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.3.0) - 2026-05-03
10
65
 
11
66
  ### Added
12
67
 
@@ -20,9 +75,7 @@ This project uses [Semantic Versioning](https://semver.org/).
20
75
  - Bootstrap `install.sh` no longer hangs at startup. The previous version did `exec </dev/tty` at the top, which cut off bash's source of piped script content (`curl … | bash`) and waited forever for the rest of the script to arrive on the user's keyboard. The whole body is now wrapped in a `main()` function so bash reads it fully before executing.
21
76
  - Bootstrap `install.ps1` no longer auto-closes its window on error. Wrapped in try/catch/finally with explicit step headers and a "Press Enter to close" pause so a transient PowerShell host stays open long enough to show the actual error.
22
77
 
23
- ---
24
-
25
- ## [1.2.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.2.0) — 2026-05-02
78
+ ## [1.2.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.2.0) - 2026-05-02
26
79
 
27
80
  ### Changed
28
81
 
@@ -45,9 +98,7 @@ This project uses [Semantic Versioning](https://semver.org/).
45
98
 
46
99
  - `--platform` flag on `bootstrap`, `refresh`, and `mark-onboarded` is accepted but ignored, with a warning. Firm operations are no longer scoped per platform.
47
100
 
48
- ---
49
-
50
- ## [1.1.6](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.1.6) — 2026-05-01
101
+ ## [1.1.6](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.1.6) - 2026-05-01
51
102
 
52
103
  ### Fixed
53
104
  - `wbox skills bootstrap` and `wbox skills refresh` now paginate every API call. Previously they fetched a single page (default `per_page=25`) for each category type, custom-field document type, and the user list, silently truncating any workspace with more than 25 entries per group. Generated `firm/categories.md`, `firm/custom-fields.md`, and `firm/users.md` are now complete.
@@ -58,9 +109,7 @@ This project uses [Semantic Versioning](https://semver.org/).
58
109
  - `wbox skills mark-onboarded` — stamps `firm.onboarded_at` in the skill's `_meta.json`. The agent invokes this as the last step of `bootstrap.md`; users typically don't need to run it manually.
59
110
  - `wbox skills list` and `wbox skills doctor` now report onboarded status (`bootstrapped (qualitative pending)` vs `onboarded`).
60
111
 
61
- ---
62
-
63
- ## [1.1.5](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.1.5) — 2026-05-01
112
+ ## [1.1.5](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.1.5) - 2026-05-01
64
113
 
65
114
  ### Fixed
66
115
  - `wbox skills install`, `wbox skills bootstrap`, and `wbox skills refresh` now honor every token source the rest of the CLI does. Previously these commands only looked at the `--token` flag and `WEALTHBOX_TOKEN` env var, ignoring tokens stored via `wbox config set-token` and `.env` files. Users running `wbox skills install` after `wbox config set-token` saw "Wealthbox token required" errors despite having a token set.
@@ -69,9 +118,7 @@ This project uses [Semantic Versioning](https://semver.org/).
69
118
  ### Added
70
119
  - `wbox skills install` accepts `--token` (matching `bootstrap`, `refresh`, and `doctor`), so a token can be supplied inline for the post-install bootstrap step.
71
120
 
72
- ---
73
-
74
- ## [1.1.4](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.1.4) — 2026-05-01
121
+ ## [1.1.4](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.1.4) - 2026-05-01
75
122
 
76
123
  ### Added
77
124
  - Workspace-level aliases for every resource-scoped category lookup. `wbox categories contact-types`, `wbox categories contact-roles`, `wbox categories event-categories`, `wbox categories task-categories`, and the rest now work alongside their existing `wbox <resource> categories` forms. Both routes call the same API endpoint.
@@ -79,25 +126,19 @@ This project uses [Semantic Versioning](https://semver.org/).
79
126
  ### Docs
80
127
  - Skill references (`lookups.md`, `contacts.md`) and `docs/cli-reference.md` updated to surface the workspace-level form as the primary listing.
81
128
 
82
- ---
83
-
84
- ## [1.0.2](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.0.2) — 2026-03-30
129
+ ## [1.0.2](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.0.2) - 2026-03-30
85
130
 
86
131
  ### Changed
87
132
  - Redesigned comment handling — comments are now embedded in `get` commands
88
133
  - Added ID shorthand for resource lookups
89
134
 
90
- ---
91
-
92
- ## [1.0.1](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.0.1) — 2026-03-30
135
+ ## [1.0.1](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.0.1) - 2026-03-30
93
136
 
94
137
  ### Changed
95
138
  - Updated README with API token instructions and config commands
96
139
  - Added deploy workflow documentation
97
140
 
98
- ---
99
-
100
- ## [1.0.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.0.0) — 2026-03-29
141
+ ## [1.0.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.0.0) - 2026-03-29
101
142
 
102
143
  ### Added
103
144
  - Full CRUD for contacts (person, household, organization, trust), tasks, events, and notes
@@ -115,76 +156,56 @@ This project uses [Semantic Versioning](https://semver.org/).
115
156
  - GitHub Actions CI (lint + test across Python 3.11, 3.12, 3.13)
116
157
  - PyPI publishing via trusted publishers (OIDC)
117
158
 
118
- ---
119
-
120
159
  ## [0.8.5](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.8.5)
121
160
 
122
161
  ### Changed
123
162
  - Standardized CLI help text across all commands
124
163
 
125
- ---
126
-
127
164
  ## [0.8.4](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.8.4)
128
165
 
129
166
  ### Added
130
167
  - PyPI badges and install instructions
131
168
 
132
- ---
133
-
134
169
  ## [0.8.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.8.0)
135
170
 
136
171
  ### Added
137
172
  - Events CRUD support
138
173
  - Notes CRUD support (create, read, update — delete not supported by API)
139
174
 
140
- ---
141
-
142
175
  ## [0.7.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.7.0)
143
176
 
144
177
  ### Added
145
178
  - Tasks CRUD support
146
179
  - Task categories
147
180
 
148
- ---
149
-
150
181
  ## [0.6.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.6.0)
151
182
 
152
183
  ### Added
153
184
  - Household member management commands
154
185
 
155
- ---
156
-
157
186
  ## [0.5.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.5.0)
158
187
 
159
188
  ### Added
160
189
  - Contact CRUD operations
161
190
  - Contact categories and metadata lookups
162
191
 
163
- ---
164
-
165
192
  ## [0.4.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.4.0)
166
193
 
167
194
  ### Added
168
195
  - Output format support (`--format json|table|csv|tsv`)
169
196
 
170
- ---
171
-
172
197
  ## [0.3.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.3.0)
173
198
 
174
199
  ### Added
175
200
  - User listing and `me` command
176
201
  - Activity feed with cursor-based pagination
177
202
 
178
- ---
179
-
180
203
  ## [0.2.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.2.0)
181
204
 
182
205
  ### Added
183
206
  - Rate limiting (sliding-window, 300 req / 5-min)
184
207
  - Token configuration (`--token`, env var, `.env`)
185
208
 
186
- ---
187
-
188
209
  ## [0.1.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.1.0)
189
210
 
190
211
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wealthbox-cli
3
- Version: 1.5.0
3
+ Version: 2.0.0
4
4
  Summary: CLI and client library for the Wealthbox CRM API
5
5
  Project-URL: Homepage, https://github.com/massive-value/wealthbox-cli
6
6
  Project-URL: Documentation, https://massive-value.github.io/wealthbox-cli/
@@ -57,9 +57,9 @@ Description-Content-Type: text/markdown
57
57
  | **Windows** (PowerShell) | `irm https://raw.githubusercontent.com/massive-value/wealthbox-cli/main/scripts/install.ps1 \| iex` |
58
58
 
59
59
  The installer:
60
- 1. Sets up the tools it needs (Python, etc. handled automatically).
61
- 2. Asks for your **Wealthbox API token**. *Where to find it:* in Wealthbox, click your initials in the top right → **Settings** → **API Access** → **Create Access Token**. Paste the token when prompted.
62
- 3. Installs the AI agent skill into [Claude Code](https://claude.ai/download) (and Codex, if you have it).
60
+ 1. Downloads the prebuilt `wbox` binary from the latest GitHub Release and verifies its SHA-256 checksum (no Python required).
61
+ 2. Installs the AI agent skill into [Claude Code](https://claude.ai/download) (and Codex, if you have it).
62
+ 3. Asks for your **Wealthbox API token**. *Where to find it:* in Wealthbox, click your initials in the top right → **Settings** → **API Access** → **Create Access Token**. Paste the token when prompted.
63
63
 
64
64
  That's it. Open Claude Code and try one of the prompts below.
65
65
 
@@ -104,16 +104,9 @@ You stay in control: the agent shows you what it's about to do before it does it
104
104
 
105
105
  ------------------------------------------------------------------------
106
106
 
107
- ## Already a Claude Code user?
107
+ ## What gets installed, where
108
108
 
109
- You can install the skill directly from the plugin marketplace inside Claude Code:
110
-
111
- ```
112
- /plugin marketplace add massive-value/wealthbox-cli
113
- /plugin install wealthbox-crm@massive-value
114
- ```
115
-
116
- The plugin auto-updates daily. Firm data lives at `~/.config/wbox/firm/` (Mac/Linux) or `%APPDATA%\wbox\firm\` (Windows) and survives plugin updates. Run `wbox doctor` to see your install status anytime.
109
+ The installer drops a single prebuilt `wbox` binary onto your PATH (`~/.local/bin/wbox` on Mac/Linux, `%LOCALAPPDATA%\Programs\wbox\wbox.exe` on Windows), then registers the AI agent skill with Claude Code (and Codex, if it's installed). Firm data lives at `~/.config/wbox/firm/` (Mac/Linux) or `%APPDATA%\wbox\firm\` (Windows) and survives reinstalls and upgrades. Run `wbox doctor` to see your install status anytime, and `wbox skills upgrade` to pull the latest skill template.
117
110
 
118
111
  ------------------------------------------------------------------------
119
112
 
@@ -155,7 +148,7 @@ wbox skills uninstall # remove the skill template (firm data is preserved)
155
148
  wbox doctor # comprehensive health check
156
149
  ```
157
150
 
158
- The marketplace plugin path (above) is recommended for Claude Code. The legacy `wbox skills install` path remains for Codex users (until OpenAI's marketplace lands), project-scoped installs, or air-gapped setups without the `claude` CLI.
151
+ The one-line installer (top of this README) wires up Claude Code automatically. These commands are for the cases the installer doesn't cover: re-running on a different host, swapping platforms, project-scoped installs, or air-gapped setups where you've placed the `wbox` binary by hand.
159
152
  </details>
160
153
 
161
154
  <details>
@@ -16,9 +16,9 @@
16
16
  | **Windows** (PowerShell) | `irm https://raw.githubusercontent.com/massive-value/wealthbox-cli/main/scripts/install.ps1 \| iex` |
17
17
 
18
18
  The installer:
19
- 1. Sets up the tools it needs (Python, etc. handled automatically).
20
- 2. Asks for your **Wealthbox API token**. *Where to find it:* in Wealthbox, click your initials in the top right → **Settings** → **API Access** → **Create Access Token**. Paste the token when prompted.
21
- 3. Installs the AI agent skill into [Claude Code](https://claude.ai/download) (and Codex, if you have it).
19
+ 1. Downloads the prebuilt `wbox` binary from the latest GitHub Release and verifies its SHA-256 checksum (no Python required).
20
+ 2. Installs the AI agent skill into [Claude Code](https://claude.ai/download) (and Codex, if you have it).
21
+ 3. Asks for your **Wealthbox API token**. *Where to find it:* in Wealthbox, click your initials in the top right → **Settings** → **API Access** → **Create Access Token**. Paste the token when prompted.
22
22
 
23
23
  That's it. Open Claude Code and try one of the prompts below.
24
24
 
@@ -63,16 +63,9 @@ You stay in control: the agent shows you what it's about to do before it does it
63
63
 
64
64
  ------------------------------------------------------------------------
65
65
 
66
- ## Already a Claude Code user?
66
+ ## What gets installed, where
67
67
 
68
- You can install the skill directly from the plugin marketplace inside Claude Code:
69
-
70
- ```
71
- /plugin marketplace add massive-value/wealthbox-cli
72
- /plugin install wealthbox-crm@massive-value
73
- ```
74
-
75
- The plugin auto-updates daily. Firm data lives at `~/.config/wbox/firm/` (Mac/Linux) or `%APPDATA%\wbox\firm\` (Windows) and survives plugin updates. Run `wbox doctor` to see your install status anytime.
68
+ The installer drops a single prebuilt `wbox` binary onto your PATH (`~/.local/bin/wbox` on Mac/Linux, `%LOCALAPPDATA%\Programs\wbox\wbox.exe` on Windows), then registers the AI agent skill with Claude Code (and Codex, if it's installed). Firm data lives at `~/.config/wbox/firm/` (Mac/Linux) or `%APPDATA%\wbox\firm\` (Windows) and survives reinstalls and upgrades. Run `wbox doctor` to see your install status anytime, and `wbox skills upgrade` to pull the latest skill template.
76
69
 
77
70
  ------------------------------------------------------------------------
78
71
 
@@ -114,7 +107,7 @@ wbox skills uninstall # remove the skill template (firm data is preserved)
114
107
  wbox doctor # comprehensive health check
115
108
  ```
116
109
 
117
- The marketplace plugin path (above) is recommended for Claude Code. The legacy `wbox skills install` path remains for Codex users (until OpenAI's marketplace lands), project-scoped installs, or air-gapped setups without the `claude` CLI.
110
+ The one-line installer (top of this README) wires up Claude Code automatically. These commands are for the cases the installer doesn't cover: re-running on a different host, swapping platforms, project-scoped installs, or air-gapped setups where you've placed the `wbox` binary by hand.
118
111
  </details>
119
112
 
120
113
  <details>
@@ -0,0 +1,51 @@
1
+ # Domain Docs
2
+
3
+ How the engineering skills should consume this repo's domain documentation when exploring the codebase.
4
+
5
+ ## Before exploring, read these
6
+
7
+ - **`CONTEXT.md`** at the repo root, or
8
+ - **`CONTEXT-MAP.md`** at the repo root if it exists — it points at one `CONTEXT.md` per context. Read each one relevant to the topic.
9
+ - **`docs/adr/`** — read ADRs that touch the area you're about to work in. In multi-context repos, also check `src/<context>/docs/adr/` for context-scoped decisions.
10
+
11
+ If any of these files don't exist, **proceed silently**. Don't flag their absence; don't suggest creating them upfront. The producer skill (`/grill-with-docs`) creates them lazily when terms or decisions actually get resolved.
12
+
13
+ ## File structure
14
+
15
+ This repo is **single-context** — one `CONTEXT.md` + `docs/adr/` at the repo root.
16
+
17
+ ```
18
+ /
19
+ ├── CONTEXT.md
20
+ ├── docs/adr/
21
+ │ ├── 0001-event-sourced-orders.md
22
+ │ └── 0002-postgres-for-write-model.md
23
+ └── src/
24
+ ```
25
+
26
+ For reference, a multi-context layout (presence of `CONTEXT-MAP.md` at the root) looks like:
27
+
28
+ ```
29
+ /
30
+ ├── CONTEXT-MAP.md
31
+ ├── docs/adr/ ← system-wide decisions
32
+ └── src/
33
+ ├── ordering/
34
+ │ ├── CONTEXT.md
35
+ │ └── docs/adr/ ← context-specific decisions
36
+ └── billing/
37
+ ├── CONTEXT.md
38
+ └── docs/adr/
39
+ ```
40
+
41
+ ## Use the glossary's vocabulary
42
+
43
+ When your output names a domain concept (in an issue title, a refactor proposal, a hypothesis, a test name), use the term as defined in `CONTEXT.md`. Don't drift to synonyms the glossary explicitly avoids.
44
+
45
+ If the concept you need isn't in the glossary yet, that's a signal — either you're inventing language the project doesn't use (reconsider) or there's a real gap (note it for `/grill-with-docs`).
46
+
47
+ ## Flag ADR conflicts
48
+
49
+ If your output contradicts an existing ADR, surface it explicitly rather than silently overriding:
50
+
51
+ > _Contradicts ADR-0007 (event-sourced orders) — but worth reopening because…_
@@ -0,0 +1,22 @@
1
+ # Issue tracker: GitHub
2
+
3
+ Issues and PRDs for this repo live as GitHub issues. Use the `gh` CLI for all operations.
4
+
5
+ ## Conventions
6
+
7
+ - **Create an issue**: `gh issue create --title "..." --body "..."`. Use a heredoc for multi-line bodies.
8
+ - **Read an issue**: `gh issue view <number> --comments`, filtering comments by `jq` and also fetching labels.
9
+ - **List issues**: `gh issue list --state open --json number,title,body,labels,comments --jq '[.[] | {number, title, body, labels: [.labels[].name], comments: [.comments[].body]}]'` with appropriate `--label` and `--state` filters.
10
+ - **Comment on an issue**: `gh issue comment <number> --body "..."`
11
+ - **Apply / remove labels**: `gh issue edit <number> --add-label "..."` / `--remove-label "..."`
12
+ - **Close**: `gh issue close <number> --comment "..."`
13
+
14
+ Infer the repo from `git remote -v` — `gh` does this automatically when run inside a clone.
15
+
16
+ ## When a skill says "publish to the issue tracker"
17
+
18
+ Create a GitHub issue.
19
+
20
+ ## When a skill says "fetch the relevant ticket"
21
+
22
+ Run `gh issue view <number> --comments`.
@@ -0,0 +1,15 @@
1
+ # Triage Labels
2
+
3
+ The skills speak in terms of five canonical triage roles. This file maps those roles to the actual label strings used in this repo's issue tracker.
4
+
5
+ | Label in mattpocock/skills | Label in our tracker | Meaning |
6
+ | -------------------------- | -------------------- | ---------------------------------------- |
7
+ | `needs-triage` | `needs-triage` | Maintainer needs to evaluate this issue |
8
+ | `needs-info` | `needs-info` | Waiting on reporter for more information |
9
+ | `ready-for-agent` | `ready-for-agent` | Fully specified, ready for an AFK agent |
10
+ | `ready-for-human` | `ready-for-human` | Requires human implementation |
11
+ | `wontfix` | `wontfix` | Will not be actioned |
12
+
13
+ When a skill mentions a role (e.g. "apply the AFK-ready triage label"), use the corresponding label string from this table.
14
+
15
+ Edit the right-hand column to match whatever vocabulary you actually use.
@@ -59,7 +59,6 @@ nav:
59
59
  - Getting Started: getting-started.md
60
60
  - CLI Reference: cli-reference.md
61
61
  - Contributing: contributing.md
62
- - Changelog: changelog.md
63
62
 
64
63
  extra:
65
64
  social: