memex-cli 0.2.1

A CLI tool for organizing AI-assisted development into a versioned, navigable DAG of conversation nodes.
# Releasing memex

This document describes how to cut a release. The release workflow at `.github/workflows/release.yml` runs on every `v*` tag, builds binaries for Linux, macOS (Intel + Apple Silicon), and Windows, attaches them with SHA-256 checksums to a draft GitHub release, and publishes the crate to crates.io.

Each release is itself tracked as a memex node so the graph captures *what shipped* alongside *how it was built*, and the release-prep PR satisfies `memex-check` naturally — no `[skip memex]` bypass needed.

## Prerequisites (one-time)

- A `CARGO_REGISTRY_TOKEN` secret on the GitHub repo, scoped to publish the `memex` crate on [crates.io]https://crates.io/. Generate at <https://crates.io/me> and add via repo Settings → Secrets and variables → Actions.

## Cutting a release

1. **Pick a version.** memex follows [SemVer]https://semver.org/: bump `MINOR` for new features, `PATCH` for bug fixes only. While the project is in `0.x`, MINOR bumps may include breaking changes.

2. **Branch from a clean `main`:**

   ```
   git checkout main && git pull
   git checkout -b release/v<version>
   ```

3. **Create the release node.** Parent is the tip of `main` (find via `memex node list` or `memex graph view`):

   ```
   memex node create --parent <main-tip-id> --goal "Release v<version>" --tag release
   ```

4. **Bump the version.** Edit `version` in `Cargo.toml`, then run `cargo build` once so `Cargo.lock` picks up the new version.

5. **Roll the changelog.** In `CHANGELOG.md`, move entries from `## [Unreleased]` into a new dated section for the version, and update the version-comparison links at the bottom.

6. **Record release context on the node.** At minimum:

   ```
   memex node edit --artifact "Cargo.toml"
   memex node edit --artifact "CHANGELOG.md"
   ```

   If anything notable was deferred from this release, capture it as an open thread; if a scope decision was made (e.g. holding a feature back, choosing a version-bump tier), record it as a decision.

7. **Verify locally:**

   ```
   cargo fmt --all -- --check
   cargo clippy --all-targets -- -D warnings
   cargo test --all-targets
   cargo package --no-verify
   ```

   All must pass.

8. **Resolve the node:**

   ```
   memex node resolve
   ```

9. **Commit, push, open PR, merge.** The release-prep commit includes the version bump, changelog roll, and the new node JSON:

   ```
   git add Cargo.toml Cargo.lock CHANGELOG.md .memex/nodes/*.json
   git commit -m "chore: release v<version>"
   git push -u origin release/v<version>
   gh pr create --title "chore: release v<version>" --body "Release-prep PR. See node <short-id> for context."
   ```

   Once CI and `memex-check` go green, merge the PR.

10. **Tag the merged commit:**

    ```
    git checkout main && git pull
    git tag v<version>
    git push origin v<version>
    ```

11. **Watch the release workflow** in GitHub Actions. When it finishes:
    - Confirm the draft GitHub release has all four target archives + checksums attached.
    - Confirm `https://crates.io/crates/memex` shows the new version.
    - Promote the draft release to published.