Skip to content

Commit db6eb78

Browse files
authored
chore: release v0.2.0 (#3)
* fix(profiles): publisher extends repo + louder hermes warning publisher.json now extends repo so it inherits AGENTS.md, CLAUDE.md, the handoff inbox, and the pre-push hook. Doctor was failing on a fresh publisher install because the profile was a slim add-on but doctor expected the workspace baseline. init now prints a stderr NOTE when --profile hermes is selected, in addition to the existing post-install note, so the experimental status is harder to miss. * ci: matrix all 6 profiles, pin content-guard, add PyPI publish workflow ci.yml install-from-source job now runs against repo, workspace, openclaw, hermes, generic, and publisher so template drift in any profile is caught. Each smoke target gets a git init first because the repo profile installs a pre-push hook. content-guard checkout pinned to v0.1.1 instead of the default branch, so upstream changes there cannot redden us. publish.yml builds an sdist + wheel on v* tags and pushes to PyPI via the PYPI_API_TOKEN secret. Includes a tag/version sanity gate so a mistyped tag cannot ship the wrong version. * docs: add CONTRIBUTING, SECURITY, CODE_OF_CONDUCT, issue templates CONTRIBUTING covers local dev, adding profiles, adding doctor checks, and graduation criteria for experimental adapters. SECURITY routes vuln reports to email, lists in/out of scope, and aims for a 14-day fix window. CODE_OF_CONDUCT references Contributor Covenant 2.1 by URL rather than inlining the full text. Issue templates cover bug, profile-init-fails, and ingester-misclassified, plus a config.yml that disables blank issues and redirects general questions to the cookbook. * release: prepare v0.2.0 - Bump pyproject.toml + __init__.py to 0.2.0 - Add CHANGELOG.md following Keep a Changelog - README: add doctor sample output, PyPI install path, idempotency note, and privacy / no-telemetry section
1 parent 17e1616 commit db6eb78

15 files changed

Lines changed: 483 additions & 9 deletions

File tree

.github/ISSUE_TEMPLATE/bug.yml

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
name: Bug report
2+
description: Something is broken in solo-mise itself (CLI, doctor, ingester, scrub).
3+
labels: ["bug"]
4+
body:
5+
- type: textarea
6+
id: what-happened
7+
attributes:
8+
label: What happened
9+
description: What did you run, and what did you expect versus what you got?
10+
placeholder: |
11+
I ran `solo-mise init --target ./foo --profile workspace` and got X.
12+
I expected Y.
13+
validations:
14+
required: true
15+
- type: input
16+
id: version
17+
attributes:
18+
label: solo-mise version
19+
description: Output of `solo-mise --version`.
20+
placeholder: solo-mise 0.2.0
21+
validations:
22+
required: true
23+
- type: input
24+
id: python
25+
attributes:
26+
label: Python version
27+
placeholder: 3.12.3
28+
validations:
29+
required: true
30+
- type: input
31+
id: os
32+
attributes:
33+
label: OS
34+
placeholder: Ubuntu 24.04, macOS 14.5, etc.
35+
validations:
36+
required: true
37+
- type: textarea
38+
id: logs
39+
attributes:
40+
label: Full output
41+
description: Paste the full stdout + stderr. Redact personal paths if you want, but keep enough for us to reproduce.
42+
render: shell
43+
validations:
44+
required: false
45+
- type: checkboxes
46+
id: scrub
47+
attributes:
48+
label: Pre-flight
49+
options:
50+
- label: I have scrubbed any personal hostnames, tokens, or paths from the report.
51+
required: true

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
blank_issues_enabled: false
2+
contact_links:
3+
- name: Cookbook (longer-form guidance + worked examples)
4+
url: https://github.com/solomonneas/solos-cookbook
5+
about: solo-mise is the kit. The cookbook is the why. Browse there for guidance and patterns rather than filing an issue here.
6+
- name: Security report
7+
url: https://github.com/solomonneas/solo-mise/security/policy
8+
about: Do not file security issues publicly. See SECURITY.md.
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
name: Ingester misclassified a handoff
2+
description: A handoff that should have promoted to a card was bounced, or vice versa. This is the most useful report you can file - routing rules need real examples.
3+
labels: ["ingester"]
4+
body:
5+
- type: dropdown
6+
id: direction
7+
attributes:
8+
label: Misclassification direction
9+
options:
10+
- "Should have promoted, was bounced to review"
11+
- "Should have been bounced, was auto-promoted"
12+
- "Targeted update fired against the wrong file"
13+
- "Other"
14+
validations:
15+
required: true
16+
- type: textarea
17+
id: handoff
18+
attributes:
19+
label: Handoff content
20+
description: |
21+
Paste the handoff that was misclassified, with all personal details scrubbed
22+
(paths, hostnames, account ids, tokens). The structure matters more than the
23+
literal content - if you cannot share it, paste a redacted version with
24+
`<redacted-purpose>` placeholders.
25+
render: markdown
26+
validations:
27+
required: true
28+
- type: textarea
29+
id: expected
30+
attributes:
31+
label: What should have happened
32+
description: |
33+
Where should this have ended up? memory/cards/<name>.md? An append to
34+
TOOLS.md? An append to a specific rule file? The review inbox?
35+
validations:
36+
required: true
37+
- type: textarea
38+
id: actual
39+
attributes:
40+
label: What actually happened
41+
validations:
42+
required: true
43+
- type: input
44+
id: version
45+
attributes:
46+
label: solo-mise version
47+
placeholder: solo-mise 0.2.0
48+
validations:
49+
required: true
50+
- type: checkboxes
51+
id: scrub
52+
attributes:
53+
label: Pre-flight
54+
options:
55+
- label: I have scrubbed personal paths, hostnames, tokens, and account ids from the handoff above.
56+
required: true
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
name: Profile init or doctor fails
2+
description: A specific profile fails to init cleanly or doctor reports failures on a fresh install.
3+
labels: ["bug", "profile"]
4+
body:
5+
- type: dropdown
6+
id: profile
7+
attributes:
8+
label: Profile
9+
options:
10+
- repo
11+
- workspace
12+
- openclaw
13+
- hermes
14+
- generic
15+
- publisher
16+
validations:
17+
required: true
18+
- type: textarea
19+
id: command
20+
attributes:
21+
label: Exact commands you ran
22+
description: We want to reproduce the failure verbatim.
23+
render: shell
24+
placeholder: |
25+
rm -rf /tmp/sm && mkdir -p /tmp/sm && git init -q /tmp/sm
26+
solo-mise init --target /tmp/sm --profile workspace
27+
solo-mise doctor --target /tmp/sm
28+
validations:
29+
required: true
30+
- type: textarea
31+
id: output
32+
attributes:
33+
label: Output
34+
description: Full output of `init` and `doctor`.
35+
render: shell
36+
validations:
37+
required: true
38+
- type: input
39+
id: version
40+
attributes:
41+
label: solo-mise version
42+
placeholder: solo-mise 0.2.0
43+
validations:
44+
required: true
45+
- type: textarea
46+
id: notes
47+
attributes:
48+
label: Anything unusual about your target?
49+
description: Pre-existing files, custom .gitignore, weird filesystem, network sandbox, etc.
50+
validations:
51+
required: false

.github/workflows/ci.yml

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ jobs:
3535
- uses: actions/checkout@v4
3636
with:
3737
repository: solomonneas/content-guard
38+
ref: v0.1.1
3839
path: content-guard
3940
- uses: actions/setup-python@v5
4041
with:
@@ -47,6 +48,10 @@ jobs:
4748
4849
install-from-source:
4950
runs-on: ubuntu-latest
51+
strategy:
52+
fail-fast: false
53+
matrix:
54+
profile: [repo, workspace, openclaw, hermes, generic, publisher]
5055
steps:
5156
- uses: actions/checkout@v4
5257
- uses: actions/setup-python@v5
@@ -57,5 +62,19 @@ jobs:
5762
python -m pip install --upgrade pip pipx
5863
pipx install .
5964
solo-mise --version
60-
solo-mise init --target /tmp/ci-smoke --profile workspace
61-
solo-mise doctor --target /tmp/ci-smoke
65+
- name: Init + doctor
66+
run: |
67+
target="/tmp/ci-smoke-${{ matrix.profile }}"
68+
rm -rf "$target"
69+
mkdir -p "$target"
70+
# The 'repo' profile installs a pre-push hook; that wants a git repo.
71+
# Other profiles do not require one but it is harmless.
72+
git init -q -b main "$target"
73+
solo-mise init --target "$target" --profile ${{ matrix.profile }}
74+
# Doctor is harness-aware. Map the profile to the right --harness value.
75+
case "${{ matrix.profile }}" in
76+
openclaw) harness=openclaw ;;
77+
hermes) harness=hermes ;;
78+
*) harness=generic ;;
79+
esac
80+
solo-mise doctor --target "$target" --harness "$harness"

.github/workflows/publish.yml

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
name: publish
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*'
7+
workflow_dispatch:
8+
9+
permissions:
10+
contents: read
11+
12+
jobs:
13+
build-and-publish:
14+
runs-on: ubuntu-latest
15+
environment: pypi
16+
steps:
17+
- uses: actions/checkout@v4
18+
19+
- uses: actions/setup-python@v5
20+
with:
21+
python-version: "3.12"
22+
23+
- name: Verify tag matches package version
24+
if: startsWith(github.ref, 'refs/tags/v')
25+
run: |
26+
set -e
27+
tag_version="${GITHUB_REF_NAME#v}"
28+
pkg_version=$(python -c "import tomllib,sys; print(tomllib.loads(open('pyproject.toml','rb').read().decode())['project']['version'])")
29+
echo "tag=$tag_version pkg=$pkg_version"
30+
if [ "$tag_version" != "$pkg_version" ]; then
31+
echo "::error::tag $tag_version does not match pyproject.toml version $pkg_version"
32+
exit 1
33+
fi
34+
35+
- name: Install build tooling
36+
run: |
37+
python -m pip install --upgrade pip
38+
python -m pip install build twine
39+
40+
- name: Build sdist + wheel
41+
run: python -m build
42+
43+
- name: Check distributions
44+
run: python -m twine check dist/*
45+
46+
- name: Publish to PyPI
47+
env:
48+
TWINE_USERNAME: __token__
49+
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
50+
run: python -m twine upload dist/*

CHANGELOG.md

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# Changelog
2+
3+
All notable changes to this project will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
## [0.2.0] - 2026-05-16
9+
10+
### Added
11+
- Memory-care staleness scaffolding: `memory/cards/decay/` layout and a doctor
12+
warning when the decay folder is missing, so durable cards do not quietly rot.
13+
- Multi-workspace handoff patterns for users administering more than one agent
14+
home; secondary workspaces write into their own `.claude/memory-handoffs/`,
15+
the owner pulls those into a staging inbox.
16+
- TokenJuice output-compaction guidance card covering Claude Code's PreToolUse
17+
wrapper path, Codex hook setup, and realistic savings expectations.
18+
- Obsidian `/note` skill template under `skills/note/` for the `workspace`
19+
profile.
20+
- `scripts/backup-restic.sh` template, exposed via the `workspace` profile.
21+
- Managed `.gitignore` block: `solo-mise init` now creates or updates a
22+
`# >>> solo-mise gitignore block >>>` section in the target's `.gitignore`.
23+
Re-runs replace only the content between the markers, so user-authored rules
24+
are preserved. Skip with `--no-gitignore`.
25+
- Release pipeline: `.github/workflows/publish.yml` builds an sdist + wheel on
26+
every `v*` tag and pushes to PyPI.
27+
- CI matrix: `install-from-source` smoke now runs against all six profiles
28+
(`repo`, `workspace`, `openclaw`, `hermes`, `generic`, `publisher`).
29+
- Project meta: `CONTRIBUTING.md`, `SECURITY.md`, `CODE_OF_CONDUCT.md`, and
30+
`.github/ISSUE_TEMPLATE/` (bug, profile-init-fails, ingester-misclassified).
31+
32+
### Changed
33+
- Deepened the `workspace` profile's bootstrap files (`AGENTS.md`, `CLAUDE.md`,
34+
`IDENTITY.md`, `SOUL.md`, `HEARTBEAT.md`, `MEMORY.md`, `SAFETY_RULES.md`,
35+
`TOOLS.md`, `USER.md`, `INSTALL_FOR_AGENTS.md`).
36+
- README: centered banner, refreshed badges, added a sample `doctor` run,
37+
noted that solo-mise makes no network calls, called out `init` idempotency.
38+
- CI now pins the `content-guard` checkout to `v0.1.1` instead of tracking the
39+
default branch.
40+
- `solo-mise init --profile hermes` prints a louder experimental-status notice
41+
on stderr in addition to the post-install note.
42+
43+
### Removed
44+
- Stale `DREAMS.md` from the repo root and lingering references in templates.
45+
46+
## [0.1.0] - 2026-05-13
47+
48+
Initial release.
49+
50+
### Added
51+
- `solo-mise` CLI with `init`, `doctor`, `scrub`, and `handoff-template`
52+
subcommands.
53+
- Six profiles: `repo` (default), `workspace`, `openclaw`, `hermes`,
54+
`generic`, `publisher`.
55+
- Conservative handoff ingester at `.claude/memory-handoffs/`: safe card
56+
handoffs become cards, targeted updates append, ambiguous material is
57+
kicked out for review.
58+
- Content-guard pre-push hook for public-leak prevention.
59+
- Sanitized bootstrap file set, starter memory cards, routing rules.
60+
- OpenClaw adapter fragments and harness-aware doctor checks.
61+
- Experimental Hermes adapter fragments.
62+
63+
[Unreleased]: https://github.com/solomonneas/solo-mise/compare/v0.2.0...HEAD
64+
[0.2.0]: https://github.com/solomonneas/solo-mise/compare/v0.1.0...v0.2.0
65+
[0.1.0]: https://github.com/solomonneas/solo-mise/releases/tag/v0.1.0

CODE_OF_CONDUCT.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Code of Conduct
2+
3+
This project follows the [Contributor Covenant, version 2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct/).
4+
5+
The full text lives at the link above. The short version: be respectful, assume good faith, keep feedback technical, and remember that everyone here is volunteering their time.
6+
7+
## Scope
8+
9+
The Code of Conduct applies to all project spaces: GitHub issues and pull requests on this repo, project-related discussions on Discord or other chat surfaces, and any in-person events where someone is representing the project.
10+
11+
## Reporting
12+
13+
If you experience or witness a violation, please email **srneas@gmail.com**. Reports are confidential. You should get an acknowledgment within 72 hours. <!-- content-guard: allow pii/email -->
14+
15+
16+
The maintainer is also the recipient of security reports - see `SECURITY.md`. Please tag the subject line so it is easy to route (e.g. "CoC report" vs "security report").
17+
18+
## Enforcement
19+
20+
The maintainer is responsible for clarifying and enforcing standards. Enforcement actions can include private warnings, public clarifications, temporary or permanent bans from project spaces, and reverting or rejecting contributions.

0 commit comments

Comments
 (0)