docs: record native live append gate

This commit is contained in:
Kinneyzhang 2026-08-20 09:35:52 +08:00
parent 3d3dda6688
commit d216c6b761
4 changed files with 61 additions and 16 deletions

View File

@ -5,6 +5,9 @@
- 2026-08-20 plan and implement post-audit hardening (`task037``task042`, - 2026-08-20 plan and implement post-audit hardening (`task037``task042`,
`task030` source-fresh evaluator continuation; `issue022``issue028`): `task030` source-fresh evaluator continuation; `issue022``issue028`):
`.phrase/phases/phase-kp-overhaul-20260726/change_post_audit_hardening_20260820.md` `.phrase/phases/phase-kp-overhaul-20260726/change_post_audit_hardening_20260820.md`
- 2026-08-20 select and implement native automatic live-append backend
(`task030`; `ekp-auto-justify-native-append`):
`.phrase/phases/phase-kp-overhaul-20260726/adr_native_live_append_backend_20260820.md`
- 2026-08-13 close issues awaiting user-visible confirmation (`issue011` - 2026-08-13 close issues awaiting user-visible confirmation (`issue011`
`issue017`, `issue019`, `issue020`; `issue018`/`task030` remain open): `issue017`, `issue019`, `issue020`; `issue018`/`task030` remain open):
`.phrase/phases/phase-kp-overhaul-20260726/change_close_user_confirmation_20260813.md` `.phrase/phases/phase-kp-overhaul-20260726/change_close_user_confirmation_20260813.md`

View File

@ -78,16 +78,35 @@
passes the same matrix without argument errors. passes the same matrix without argument errors.
- **Commit:** `01001b9`. - **Commit:** `01001b9`.
## 2026-08-20 — Implement user-selected native live-append backend
- **Modify** `ekp-buffer.el` and `ekp.el` to let prepared automatic live
append use the loaded C 1D DP when `ekp-auto-justify-native-append` is
non-nil, without changing ordinary full-layout dispatch or the 15-field C
ABI. Native-unavailable and option-disabled paths remain Elisp.
- **Add** `adr_native_live_append_backend_20260820.md`, bilingual README
guidance, evaluator backend metadata, and a public buffer regression proving
the setting toggles the bridge.
- **Verification:** native bridge/parity regression 1/1 and source-first ERT
296/296 pass. In the bounded all-width, 2/4/8/16-row, GC-excluded
source-fresh round, the candidate width-80 C p95/p99 was
14.190/16.495 ms and the Elisp-configured live path (native append backend)
was 13.484/14.334 ms. Layout parity, zero-work, GC, conflict, and width
non-regression checks passed; the C p99 remains just above the locked
16 ms target, so `issue018/task030` stays open.
- **Commit:** `3d3dda6`.
## Verification ## Verification
- Source-first normal ERT: 295/295. - Source-first normal ERT: 296/296.
- Source-first seeded random ERT: 295/295, including all nine GUI verifier - Source-first seeded random ERT: 296/296, including all nine GUI verifier
tests previously omitted by the name filter. tests previously omitted by the name filter.
- Per-test isolated ERT: 294/294 process runs logged `0 unexpected`; the - Per-test isolated ERT: 294/294 process runs logged `0 unexpected`; the
later batch-position test is covered by focused isolated C ERT. later batch-position test is covered by focused isolated C ERT.
- C focused ERT: 15/15; C portable build warning-clean; source fuzz: - C focused ERT: 15/15; C portable build warning-clean; source fuzz:
300/300 with zero failures; checkdoc, release, dictionary, and shell gates 300/300 with zero failures; checkdoc, release, dictionary, and shell gates
pass. pass.
- Corrected narrowed source evaluator: parity, zero-work, GC, conflicts, and - Corrected source evaluator: parity, zero-work, GC, conflicts, and width
width non-regression pass, but source candidate p99 remains above 16 ms; non-regression pass. The bounded all-width/row source round still reports
the performance issue is intentionally not closed. C p99 16.495 ms at width 80, so the performance issue is intentionally not
closed.

View File

@ -2,13 +2,16 @@
## issue018 [ ] Unique live appends miss the frame budget at very narrow widths ## issue018 [ ] Unique live appends miss the frame budget at very narrow widths
- **Status:** Exact incremental implementation verified; the locked - **Status:** Native live-append backend implemented and verified; the locked
source-instrumented gate remains open. source-fresh gate remains open for preparation/assembly latency.
- **Summary:** Stable transactions removed per-key whole-hard-line planning, - **Summary:** Stable transactions removed per-key whole-hard-line planning,
and task030 now incrementally extends paragraph preparation, Elisp DP and task030 incrementally extends paragraph preparation, DP state, and
state, and layout lines only at structural row crossings. Byte-compiled layout lines only at structural row crossings. The user-selected
production paths are within the 16 ms frame budget; the deliberately `ekp-auto-justify-native-append` backend now uses the loaded C 1D DP for
source-loaded, fully instrumented evaluator still exceeds it. prepared live appends even when full layout is configured for Elisp.
Byte-compiled production paths are within the 16 ms frame budget; the
source-fresh evaluator still exceeds it in Elisp-owned preparation and plan
assembly.
- **Environment:** Emacs 30.2 on macOS, C backend 1.6, benchmark width - **Environment:** Emacs 30.2 on macOS, C backend 1.6, benchmark width
fixed at 80 px, `gc-cons-threshold` bound to fixed at 80 px, `gc-cons-threshold` bound to
`most-positive-fixnum` so mutator work is measured without GC pauses. `most-positive-fixnum` so mutator work is measured without GC pauses.
@ -70,14 +73,25 @@
pure-Elisp DP from a safe reachable state, reuses common layout lines, and pure-Elisp DP from a safe reachable state, reuses common layout lines, and
reconstructs only the live dirty source island. Unsupported contexts take reconstructs only the live dirty source island. Unsupported contexts take
the unchanged full path. C int32 validation now performs one extraction. the unchanged full path. C int32 validation now performs one extraction.
- **Native backend update (2026-08-20):** `ekp-auto-justify-native-append`
now routes prepared 1D live append DP through the loaded C module even when
full layout uses Elisp. The option can be disabled for a pure-Elisp live
path, and unavailable modules fall back exactly. In a bounded source-fresh
all-width, 2/4/8/16-row, GC-excluded round, width-80 candidate append-DP
p95/p99 was 2.051/3.127 ms for C and 2.495/3.406 ms for the Elisp-configured
live path. Total p95/p99 was 14.190/16.495 ms and 13.484/14.334 ms,
respectively; preparation and assembly remain the active budget owners and
the C p99 is still just above 16 ms.
- **Verification:** Exact baseline/C/Elisp hashes and append-chain - **Verification:** Exact baseline/C/Elisp hashes and append-chain
equivalence pass across 64/80/96/128/160 px, 2/4/8/16-row fixtures, equivalence pass across 64/80/96/128/160 px, 2/4/8/16-row fixtures,
default/excluded GC, unsafe fallbacks, and randomized chains. Normal and default/excluded GC, unsafe fallbacks, and randomized chains. Current
random-order ERT pass 199/199; 300 fuzz cases, warning-clean production/C source-first normal and random-order ERT pass 296/296; the native bridge
compilation, 9/9 C tests, release checks, and reviewed temporal GUI parity regression passes 1/1; 300 fuzz cases, warning-clean production/C
evidence pass. compilation, C contract tests, release/dictionary checks, and reviewed
temporal GUI evidence pass. The bounded source-fresh performance round
remains red only on the C p99 absolute target.
- **User Confirmation:** Pending; the formal source-instrumented performance - **User Confirmation:** Pending; the formal source-instrumented performance
target also remains open. target also remains open.
- **Resolved At:** Unresolved. - **Resolved At:** Unresolved.
- **Resolved By:** Pending. - **Resolved By:** Pending.
- **Commit:** Pending. - **Commit:** `3d3dda6` (native backend); performance gate remains open.

View File

@ -63,3 +63,12 @@
is 9.753/5.663 ms for both engines, while Elisp append-DP is 55.970 ms is 9.753/5.663 ms for both engines, while Elisp append-DP is 55.970 ms
and C append-DP is 1.015 ms. The evaluator wrapper collision was fixed and and C append-DP is 1.015 ms. The evaluator wrapper collision was fixed and
the same source matrix passes the harness without argument errors. the same source matrix passes the harness without argument errors.
- User-selected architecture option 2 is implemented as
`ekp-auto-justify-native-append`: loaded C DP is used only for prepared
auto live append, while full/string `ekp-use-c-module=nil` remains pure
Elisp and unavailable native modules fall back exactly. The source
append-DP p95 drops from roughly 56 ms to roughly 2.1 ms in the bounded
all-width/row run; preparation and assembly remain the active budget
owners. Width-80 C candidate p95/p99 is 14.190/16.495 ms, so the locked
16 ms gate remains open rather than being marked complete on a noisy
single-round result.