Skip to content

0.0.17: imports typed with autosave are one producer run, a killed clangd keeps your file, xmake runs stay private and recover (mcppls-clangd 0.0.17) - #67

Merged
Sunrisepeak merged 16 commits into
mainfrom
release/0.0.17
Oct 23, 2026
Merged

Sunrisepeak merged 16 commits into
mainfrom
release/0.0.17

Conversation

@Sunrisepeak

@Sunrisepeak Sunrisepeak commented Oct 22, 2026 •

Copy link
Copy Markdown
Owner

The 0.0.17 release, together with mcppls-clangd 0.0.17 (Sunrisepeak/mcppls-clangd#9, released as v0.0.17, 23.1.0-mcppls.5), which this PR tested through packaging/engine-candidate.json before the engine merged; the lock now names the released archives (each checked against two downloads and the published .sha256) and the candidate file is gone. Design: .agents/docs/mcppls-0.0.17-release.md (§8 marks what each acceptance item came to, §10 the record) and .agents/docs/2026-10-24-0.0.17-xmake-sandbox-design.md. It carries PR #65's commits and replaces #65.

Product

Known issues (CHANGELOG): clangd's memory can still grow while idle on one nightly project (#59 U13; not the memo writes); the slowest completion while typing with autosave is ~0.2 s slower than 0.0.16 on the nightly machines (p95 unchanged).

CI / measurement

  • requires-mcpp fixtures; a run check (a program the user runs in the workspace); manual nightly inputs payload-run, scope, ux-repeat, ux-baseline with measure compare.
  • PR CI green on the candidate engine, on the released engine and with the xmake fixes; full nightly 40009683587 on the release head green (ux 8 rounds, termux, Zed, self-hosting, startup timing).

Local verification: mcpp test 41/41, devtools 9/9, devtools check all, spec validation 0 failures; new fixtures fail against the 0.0.16 server and pass; the five existing xmake fixtures pass; a 0.0.16 cache with the old xmake layout is taken over by the new server (ready, source xmake).

Release preflight hit the unchanged 4 MiB / 2 s send check on macOS dev after PR #64 had merged. Sending still encoded each JSON frame synchronously on the caller, even though pipe writes were queued. Queue an owned JSON snapshot and encode it on the writer outside the queue lock, preserving FIFO, both framings and UTF-8 replacement. Writer exceptions become a connection failure and unsent snapshots are discarded after closing the queue.

Keep the original send/stop gates and record their actual elapsed time. Real echo and departed-peer tests cover snapshot lifetimes, ordering, shutdown drain and error cleanup. Keep the first failure and the limits of its timing evidence; no host-load attribution or OOM injection is claimed. Version 0.0.17 is still unpublished.

Refs #59, #64.
The target fixture used a simulated producer, which left the design's native Windows i686/x64 production chain unproven. A separate Windows fixture configures both targets with real mcpp and follows their complete unmodified databases in one LSP session, checking actual commands and conditional module semantics. CI retains the first generated databases and logs separately from diagnostic reruns. Product and runner code remain unchanged; native acceptance is still required.
…ndaries

A successful producer answer acknowledges the source structure it actually covered, so inactive imports no longer trigger discovery on every body save. Run-start stamps, generations and producer identities keep failures and concurrent changes conservative. Existing files named as workspace folders fall back to directory roots before clangd starts.

Preserve completion timing support, correct the genuine Windows fixture std dependency, and retain first CI evidence. Termux uses the official package source and the Zed smoke requires both its independent PATH clangd and mcppls own initialized child. Ship a portable, checksummed handoff bundle instead of references to one machine.

Validation: dev/release each pass six workspace members and 58 programs, plus 32 LSP fixtures including the new 70-check source-watch fixture. Specification validation reports zero failures. The 222-file evidence archive was verified and extracted independently. New-source CI, native Windows production-chain acceptance and unresolved performance investigation remain pending; no merge or release.
…angd keeps the file being typed in, a crashed-on file goes back once its modules are rebuilt

- W4 (#59 U15): a structure reload that saves of a file still being typed in ask for waits until the file is quiet
  (EDIT_SETTLE, at most 30 s). New fixture mcpp-autosave-import-typing: 0.0.16 makes 6 producer runs and 13 state
  changes in a minute of imports and bodies typed in turn with autosave; this makes 3 and 4.
- W5 (#59 U9, U7a): an exit that names no file is a strike, not a set-aside; a file set aside after an exit goes back
  once its import closure has been rebuilt differently. New fixtures clangd-exit-strike and clangd-crash-closure fail
  on 0.0.16 and pass here.
- M3: slow completions (2 s+) record queue, engine and answer time in the slow-request event; the runner keeps them.
- C4: fixtures declare the mcpp they need ("requires-mcpp"), checked by the runner; CI installs MCPP_FIXTURE_VERSION
  for them as MCPPLS_REAL_MCPP (mcpp-target-windows-real needs 2026.10.5.2's Windows quoting fix).
- M5: the overflow-trace test prints both sides of each comparison on failure.
- CI: a manual nightly can reuse a CI run's payloads (payload-run), run only ux (scope), repeat the edits stage
  (ux-repeat) and run a released server beside it on the same machines (ux-baseline, measure compare); a manual
  CI or nightly of a branch may use a candidate engine.
- D5: the PR65 evidence bundle stays in fcb3450's history; the tree keeps a pointer to it.
- Docs: release design (.agents/docs/mcppls-0.0.17-release.md), changelog, projects, troubleshooting, release (en, zh-CN).
…ow request; traceability names the reload's new signature
…is told at once, not after the drain's bound (the nightly's v0.0.16 baseline waited 900 s per stage)
…5), released; the candidate file goes; the changelog names what the nightly measured and the known issues
…and its state is a cache made again from nothing (#68, #69)

XS-1: XMAKE_TMPDIR beside XMAKE_CONFIGDIR and --builddir, so xmake's GCC module mapper files, named by the
source's relative path alone, no longer point the user's next incremental build at modules never built (#69).
XS-2: the private state lives in <cache>/xmake/state, keyed by the configuration, xmake itself and every
xmake.lua; a new key removes it and configures from nothing instead of in place, where xmake's module scan
cache (updated only by a build) made every describe fail after a target was added (#68). The 0.0.16 layout
goes on the first run. XS-3: when xmake says the kept state is out of date (dependfile ... not found), it is
made again once. XS-4: resetting the cache removes the build tools' private states before the next load.

Fixtures xmake-shared-tmp, xmake-target-then-mode (real xmake) and xmake-stale-state (stand-in) fail on
0.0.16 and pass; the runner gains a run check. #24 registers UP-X1 and UP-X2.
@Sunrisepeak Sunrisepeak changed the title 0.0.17: imports typed with autosave are one producer run, a killed clangd keeps your file, an idle clangd stops growing (mcppls-clangd 0.0.17) 0.0.17: imports typed with autosave are one producer run, a killed clangd keeps your file, xmake runs stay private and recover (mcppls-clangd 0.0.17) Oct 23, 2026
@Sunrisepeak
Sunrisepeak merged commit 6703e44 into main Oct 23, 2026
62 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant