From 6113c5338194e96c506b0c82a0487abf284215e8 Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Mon, 18 May 2026 13:55:27 -0400 Subject: [PATCH] v1.0.0 release prep: CHANGELOG, version bump, README, MSRV MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Roadmap steps #3–#6 (post-CI-green doc/version work; no source change — the CI-validated tree at ed78465 is unchanged). - CHANGELOG: authored the [1.0.0] --- 2026-05-18 body. M7–M10 arc (third-party packages / fs API + dired-magit-outline / MCP / multi-frontend CRDT collaboration) over the 0.1.0 M1–M6 preview; the pulled-forward v0.2-prerequisite public APIs; SSH stderr Changed + Broken-pipe Fixed carried from Unreleased; Known limitations (per-frontend undo not persisted across reattach, Finding 4; macOS m6_5 REPL ctrl-c/exit-marker timing); project posture (forbid(unsafe_code), 1.95.0 pin, cross-flavor CI). - Version: 0.1.0 -> 1.0.0 (Cargo.toml + Cargo.lock). Production version reporting already flows from CARGO_PKG_VERSION; verified `pmacs --version` -> `pmacs 1.0.0`, version-sensitive tests pass. - README: Status -> v1.0.0 stable, contributions open; build line -> the rust-toolchain.toml-pinned 1.95.0. - MSRV: rust-version 1.85 -> 1.95 to match the validated toolchain pin (was an unverified floor; pmacs is a pinned-toolchain app, so MSRV reflects the pinned/validated compiler). Quiescent audit (#6): doc/version-only delta from CI-green ed78465; build/version-tests/fmt verified clean on pinned 1.95.0; prose reviewed accurate. SP-9 (macOS m6_5) logged in the gitignored V0.2-PREREQUISITES.md. Not in scope here / remaining: the recorded two-laptop manual acceptance run (#7, operator) and the v1.0.0 tag (#8, operator). Co-Authored-By: Claude Opus 4.7 --- CHANGELOG.md | 109 ++++++++++++++++++++++++++++++++++++++++++++++++--- Cargo.lock | 2 +- Cargo.toml | 4 +- README.md | 11 +++--- 4 files changed, 113 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a92f29..8ec77c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,12 +5,77 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] +## [1.0.0] --- 2026-05-18 -> Scope note: this section currently records only release-affecting -> changes surfaced during M10 ship-gate work. The full M6–M10 v1.0 -> changelog body is a separate release-authoring task and is not yet -> written here. +First stable release. Builds on the 0.1.0 preview (M1–M6) with the +M7–M10 arc: third-party packages, the universality proof across three +shape-distinct workloads, MCP, and multi-frontend CRDT collaboration. +Solo development through 1.0; public contributions open from this +release. + +### Added + +#### Third-party package system (M7) + +- Package install at user-config and project scope + (`pmacs.packages.install` / `install_project`) with `version` / + `branch` / `commit` pins and a lockfile. +- Per-package environment with `exports`; `require` resolution scoped + so packages can declare module-level state without cross-package + collision. +- Edit intercepts: packages observe and transform buffer mutations; + multiple intercepts thread in attach order. +- Audit-lint rule set (the package-trust surface): error/warning/info + patterns across environment-escape, fs-mutation, process-spawn, and + reach-around classes; runnable locally and in CI. + +#### Filesystem API and bundled packages (M8) + +- `pmacs.fs.*` worker-dispatched surface: `read_dir`, `stat`, + `rename`, `chmod`, `remove` with M3 `supersede` chaining on read + ops; UTF-8 path constraint surfaced as a structured failure. +- Three shape-distinct bundled packages proving the buffer + universality claim: dired (directory listing), magit (section + view), outline / outline-aggregate (derived structure views). +- Dev-loop APIs: `pmacs.packages.install_local`, `reload`, + `on_unload`. + +#### MCP for package authors (M9) + +- Model Context Protocol surface so package authors can expose + editor capability to AI assistance over the same protocol-uniform + path as the rest of the system (see `docs/mcp-for-package-authors.md`). + +#### Multi-frontend CRDT collaboration (M10) + +- CRDT layer (loro-backed, feature-gated) with an optimistic-apply + keystroke path; daemon owns the authoritative replica, frontends + mirror it. +- Two laptops attach to one daemon instance, both edit one file, + edits converge within a frame; per-frontend undo; presence and + per-frontend cursor rendering. +- Convergence verified under simulated network jitter + (`PMACS_INSTANCE_LATENCY_JITTER_MS`); automated synthetic-frontend + and doubled-PTY acceptance plus a two-laptop manual checklist. + +#### Pulled-forward v0.2-prerequisite APIs + +Planned promotions from `V0.2-PREREQUISITES.md`, implemented and +shipped in 1.0 (the public-API ceiling was raised by operator +decision to absorb them): + +- `pmacs.buffer.from_file`, `pmacs.buffer.on_removed` (with an + idempotent `:remove()` handle; buffer-local keymaps pruned on + removal). +- `bypass_intercept` option on `buffer.insert` / `delete` / `replace` + (skips the intercept chain only; undo/dirty/view/CRDT bookkeeping + preserved). +- `pmacs.fs.watch` (polling watcher; `:cancel()` / + `:is_cancelled()`). +- `pmacs.async.yield_to_next_tick` (worker-free next-tick yield). +- `pmacs.editor.move_to_line` (0-based, clamps out of range). +- `pmacs.outline.query` (cross-package outline structure query). +- Audit-lint rule 16 `reach-around-require-field` (info). ### Changed @@ -36,6 +101,39 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 could consume the daemon's server-speaks-first `Hello`; the established connection is now reused (regression-tested). +### Known limitations + +- **Per-frontend undo history does not persist across reattach.** + After a frontend disconnects and reconnects, it is issued a fresh + collaboration identity; its pre-disconnect edits remain in the + converged document (CRDT state is fully restored) but are no longer + reachable by that frontend's undo command — undo only reaches + edits made since reconnecting. Workaround: remove unwanted + pre-disconnect content by editing it out. Preserving undo history + across reconnect is tracked for v0.2 + (`V0.2-PREREQUISITES.md`, Finding 4). +- **macOS REPL ctrl-c / exit-marker timing.** Two M6.5 REPL + acceptance tests (`m6_5_ctrl_c_sends_sigint`, + `m6_5_exit_marker_uses_basename_with_leading_newline`) time out on + macOS CI runners. The core daemon, CRDT, and remote-attach paths — + including the Mac-host collaboration scenario — build and pass on + macOS (the lib suite is green there); the limitation is confined + to bundled-REPL signal/exit-marker timing. Tracked for v0.2. + +### Project posture + +- `forbid(unsafe_code)` maintained across the crate; syscalls that + need unsafe are bridged via `/bin/sh` / coreutil / binary + trampolines or safe `nix` wrappers. +- Rust toolchain pinned (`rust-toolchain.toml`, 1.95.0) so local and + CI build the same validated compiler; bumped deliberately. +- Cross-flavor CI: every test runs under both `luajit` and `lua54`; + clippy `-D warnings` clean on both flavors and the `crdt` lane; + release-only perf-gate jobs. +- Library suite ~1223 tests (non-crdt) / ~1377 (crdt), zero failing + on the pinned toolchain, plus per-milestone integration suites + through M10. + ## [0.1.0] --- 2026-05-03 First public preview. Solo development through 1.0; public contributions @@ -153,4 +251,5 @@ deferred until then. (m1-acceptance through m6_8, m6_perf, m4-acceptance, m5_5..m5_8, m6_4..m6_7). +[1.0.0]: https://example.invalid/pmacs/releases/tag/v1.0.0 [0.1.0]: https://example.invalid/pmacs/releases/tag/v0.1.0 diff --git a/Cargo.lock b/Cargo.lock index ae4117a..34e2b4a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1242,7 +1242,7 @@ checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" [[package]] name = "pmacs" -version = "0.1.0" +version = "1.0.0" dependencies = [ "crossbeam", "crossterm", diff --git a/Cargo.toml b/Cargo.toml index b17a4c7..6e39e54 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "pmacs" -version = "0.1.0" +version = "1.0.0" edition = "2024" -rust-version = "1.85" +rust-version = "1.95" description = "Parallel Emacs --- a Rust-cored, Lua-scripted editor in the Emacs tradition" license = "MIT OR Apache-2.0" authors = ["Pmacs contributors"] diff --git a/README.md b/README.md index 59d737f..5a36691 100644 --- a/README.md +++ b/README.md @@ -23,14 +23,15 @@ the package uses zero direct Rust core access was the v0.1 ship gate. ## Status -**v0.1.0 --- preview.** The design described above is implemented and -working. Solo development through 1.0; public contributions are -deferred until then. Use, evaluate, and file issues; pull requests -will get a friendly "thanks, see you at 1.0" until that gate. +**v1.0.0 --- stable.** The design described above is implemented and +working. Solo development carried the project to 1.0; public +contributions are open from this release. Use, evaluate, file issues, +and send pull requests. ## Build -Requires Rust `1.85` or newer (edition 2024). Lua flavor selectable +Builds on the toolchain pinned in `rust-toolchain.toml` (Rust +`1.95.0`, edition 2024); rustup selects it automatically. Lua flavor selectable between `luajit` (default) and `lua54`; both pass the full test suite. ```sh