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:
parent
ed78465aa7
commit
6113c53381
109
CHANGELOG.md
109
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
|
||||
|
|
|
|||
|
|
@ -1242,7 +1242,7 @@ checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e"
|
|||
|
||||
[[package]]
|
||||
name = "pmacs"
|
||||
version = "0.1.0"
|
||||
version = "1.0.0"
|
||||
dependencies = [
|
||||
"crossbeam",
|
||||
"crossterm",
|
||||
|
|
|
|||
|
|
@ -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"]
|
||||
|
|
|
|||
11
README.md
11
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
|
||||
|
|
|
|||
Loading…
Reference in New Issue