v1.0.0 release prep: CHANGELOG, version bump, README, MSRV

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 <noreply@anthropic.com>
This commit is contained in:
Levi Neuwirth 2026-05-18 13:55:27 -04:00
parent ed78465aa7
commit 6113c53381
4 changed files with 113 additions and 13 deletions

View File

@ -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/), 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). 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 First stable release. Builds on the 0.1.0 preview (M1M6) with the
> changes surfaced during M10 ship-gate work. The full M6M10 v1.0 M7M10 arc: third-party packages, the universality proof across three
> changelog body is a separate release-authoring task and is not yet shape-distinct workloads, MCP, and multi-frontend CRDT collaboration.
> written here. 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 ### 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 could consume the daemon's server-speaks-first `Hello`; the
established connection is now reused (regression-tested). 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 ## [0.1.0] --- 2026-05-03
First public preview. Solo development through 1.0; public contributions 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, (m1-acceptance through m6_8, m6_perf, m4-acceptance, m5_5..m5_8,
m6_4..m6_7). 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 [0.1.0]: https://example.invalid/pmacs/releases/tag/v0.1.0

2
Cargo.lock generated
View File

@ -1242,7 +1242,7 @@ checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e"
[[package]] [[package]]
name = "pmacs" name = "pmacs"
version = "0.1.0" version = "1.0.0"
dependencies = [ dependencies = [
"crossbeam", "crossbeam",
"crossterm", "crossterm",

View File

@ -1,8 +1,8 @@
[package] [package]
name = "pmacs" name = "pmacs"
version = "0.1.0" version = "1.0.0"
edition = "2024" edition = "2024"
rust-version = "1.85" rust-version = "1.95"
description = "Parallel Emacs --- a Rust-cored, Lua-scripted editor in the Emacs tradition" description = "Parallel Emacs --- a Rust-cored, Lua-scripted editor in the Emacs tradition"
license = "MIT OR Apache-2.0" license = "MIT OR Apache-2.0"
authors = ["Pmacs contributors"] authors = ["Pmacs contributors"]

View File

@ -23,14 +23,15 @@ the package uses zero direct Rust core access was the v0.1 ship gate.
## Status ## Status
**v0.1.0 --- preview.** The design described above is implemented and **v1.0.0 --- stable.** The design described above is implemented and
working. Solo development through 1.0; public contributions are working. Solo development carried the project to 1.0; public
deferred until then. Use, evaluate, and file issues; pull requests contributions are open from this release. Use, evaluate, file issues,
will get a friendly "thanks, see you at 1.0" until that gate. and send pull requests.
## Build ## 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. between `luajit` (default) and `lua54`; both pass the full test suite.
```sh ```sh