Skip to content

test(input): add multilingual browser input baseline - #380

Draft
seonghobae wants to merge 54 commits into
fix/atomic-controlled-sync-200from
test/cjk-input-assurance-376
Draft

test(input): add multilingual browser input baseline#380
seonghobae wants to merge 54 commits into
fix/atomic-controlled-sync-200from
test/cjk-input-assurance-376

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Refs #376.

Purpose

Draft real-browser input-assurance child for #201. This lane owns browser harness/spec/config evidence only and does not write or re-own src/** production semantics.

Stack ownership

Do not embed mutable head/base SHAs, workflow run IDs, review counts, or mergeability snapshots here as durable truth. Refetch them immediately before every action.

Browser-assurance scope

The child owns the committed browser harness/config/specs for multilingual/CJK and grapheme input, synthetic composition lifecycle, composition/clipboard interactions, native-form serialization, active-composition teardown/remount, read-only clipboard behavior, touch/pointer/focus geometry, reflow behavior, and loopback-only browser requests.

Its intended net delta is the browser-assurance set under:

  • tests/browser/harness.ts;
  • tests/browser/input-harness.html;
  • tests/browser/input-harness.ts;
  • tests/browser/playwright.config.ts;
  • tests/browser/vite.config.ts;
  • tests/browser/specs/composition-clipboard.browser.spec.ts;
  • tests/browser/specs/composition-native-form.browser.spec.ts;
  • tests/browser/specs/read-only-clipboard.browser.spec.ts;
  • tests/browser/specs/touch-clipboard.browser.spec.ts;
  • tests/browser/specs/stylesheet-identity.browser.spec.ts.

The accompanying docs/TEST_STRATEGY.md and docs/doctoring/browser-stylesheet-provenance.md record assurance methodology and limits. The actual input editor and the shared focus/print CSS URL select the extracted package stylesheet in package mode or the local build in source mode. Archive-digest metadata alone does not prove which CSS the browser loaded; the regression checks loaded identity and shared-route bytes. Source and package runs require separate current-head proof. The matching collaboration entry and lazy actual-renderer probe also follow that selection; the shared normal-color regression supports downstream forced-colors inspection without copying renderer markup.

The shared tests/browser/evidenceContract.ts also rejects an absent package archive when an expected digest is explicitly supplied. Its executable regression extends the existing src/releaseBrowserEvidence.test.ts assurance test only; no production src/** implementation changes. Unconfigured source-only evidence remains permitted, while expected package evidence must have matching actual bytes.

Before every restack or lifecycle action, independently compare the exact live parent to the exact child and prove the child is not carrying a competing production-source delta.

Executable discovery contract

A predecessor contained composition-native-form.browser.spec.ts while its inherited Playwright selector selected only a narrow clipboard/print subset. File presence was therefore false-green evidence.

The child deliberately uses the stronger desktop-engine discovery contract /\.browser\.spec\.ts$/u, so committed *.browser.spec.ts journeys are selected by Chromium, Firefox and WebKit while the dedicated consensus spec remains isolated in its own project. The native-form/composition journeys also fail closed on non-loopback browser requests: only the declared loopback harness origin is permitted and any rejected origin must make the journey fail.

Evidence discipline

For every exact current child generation:

  • require the child to contain the exact then-current fix(data-integrity): keep controlled value sync atomic #201 parent in ancestry;
  • require exact-head CI/browser evidence and inspect actual checkout/source identity;
  • require browser discovery to execute the committed journeys rather than merely finding their files;
  • require applicable package/build/Office checks for that generation;
  • treat Security/SAST/organization evidence as absent/non-passing when the stacked Draft does not generate it;
  • refetch formal reviews and unresolved threads independently.

Pending, queued, skipped-required, cancelled, absent, neutral, failed, stale, predecessor, status-only, model-only, wrong-checkout, synthetic-source, undiscovered-test, or otherwise vacuous evidence does not pass. Parent/predecessor workflow evidence never transfers to a newly synchronized child head.

Assurance boundary

This is browser-emulation/component evidence only. It does not establish physical-device OS-IME candidate behavior, real iOS Safari/Android Chrome support, durable save, authorization, transport, tenancy, durable persistence, host network policy, or collaboration-provider authority.

No transport, authentication, authorization, tenancy, durable persistence, credentials, model/provider, network, host-owned Yjs-provider, durable audit, deployment, migration, retention, or durable PDF authority moves into Inkspan through this lane.

Remaining #376 acceptance

This Draft does not close #376. Remaining acceptance includes authorized real OS-IME/candidate journeys; broader controlled-value/autosave concurrency combinations beyond the locally covered single composed snapshot; collaboration-near-composition behavior; broader toolbar/dialog/hydration cases; stronger mobile target-size/no-hover/focus/zoom/reflow assurance on accepted devices; and periodic authorized real-device evidence before claiming iOS Safari or Android Chrome support.

Lifecycle boundary

Keep this PR Draft behind #201 and the protected release-acceptance boundary. Before any lifecycle transition, refetch protected main, exact parent/head/live base, ancestry/mergeability, changed refs/active writers, live governance, exact-current workflow/job evidence including checkout SHAs, formal reviews and unresolved threads. Do not self-approve, weaken gates, transfer predecessor evidence, fabricate mobile/IME support, create a competing production writer, or represent this Draft as protected-main shipped truth.

Refs #376. Add cross-engine committed-input fidelity coverage plus a bounded synthetic composition lifecycle probe without claiming real OS IME or mobile-device support.
@coderabbitai

coderabbitai Bot commented Aug 20, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@seonghobae
seonghobae changed the base branch from main to fix/atomic-controlled-sync-200 August 21, 2026 14:16
@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact-head foundation and browser-fixture verification — 2026-09-05

Candidate f10dd9058446fe2df18311ea272cc868b5dccad1 inherits its source owner #201 c80e2b3fb6410306f4bf2750bb1ed56d5db9d074 and the #176/#402 prerequisites through an ordinary, conflict-free merge. Against that parent, the complete delta is still the same eight browser harness/config/spec files, with no src/** or shared dependency/workflow delta.

The inherited editor API exposed one fixture migration defect: preparing the heading, list and table cases emitted an edit snapshot. All three new preparation assertions were RED. The existing fixture now uses explicit update suppression; all nine focused cases pass across Chromium, Firefox and WebKit. This repair belongs to test preparation, not production editing semantics, and no expected input or callback oracle was weakened.

Fresh verification on this final head:

  • 176 production unit-test files / 1,021 tests passed; measured statements, branches, functions and lines remain 100%, without unhandled errors.
  • Full build and package verification passed, including strict TypeScript and independently staged public consumers.
  • Browser discovery selects 136 cases, and the full source-harness run executes all 136 successfully with zero unexpected, skipped or flaky tests and no global errors. The consensus receipt binds this exact head and run 05fcc088-5898-4ea2-a6e0-30f752038b0e.
  • Project-local macOS CPython 3.14.6 Office verification passed 173 tests with 100% statements, branches and docstrings. This uses the declared local development dependencies, not the Linux-only CI wheel lock, and does not replace the hosted Ubuntu matrix.
  • A separately retained 0.7.0 pnpm pack archive has SHA-256 b666296e207d6636e2610e03d0fe52768650464842b32851035f1356ffc63600, identical to the source-owner package. This is expected for a browser-only child, not proof of a published release or installed-tarball browser execution.

These results establish browser-emulated/component input, composition, form, clipboard and touch/focus behavior only. They do not prove real OS-IME candidate handling, physical iOS/Android devices, installed-tarball browser identity, a 20ms performance target, durable persistence or collaboration-provider authority. Keep Draft and keep parent-before-child protected integration. Hosted skipped/queued/absent checks and predecessor reviews are non-passing; no Ready, approval, merge, release or bypass is claimed.

seonghobae added a commit that referenced this pull request Sep 5, 2026
Preserve the four-file forced-colors source/test delta while inheriting #380 and its #201/#176/#402 prerequisites through ordinary history. The existing focus, forced-colors and print stylesheet tests pass. No browser discovery configuration is copied or re-owned here; normal theme rules and the already-merged #362 baseline remain intact.

Signed-off-by: Seongho Bae <me@seonghobae.me>
Signed-off-by: Seongho Bae <me@seonghobae.me>
@seonghobae

Copy link
Copy Markdown
Contributor Author

Source-owner teardown inheritance and bounded local proof — 2026-09-06

Draft candidate a271dd0f37e700951dc6d0227c95919db99403fd inherits #201 f9a7879b66ea7c9590caa0d0465c84050791aa6c by an ordinary conflict-free merge. The only newly inherited change is the source owner's corrected teardown-test oracle. Against that parent, this PR still owns exactly the same eight browser harness/config/spec files and has no production-source or shared dependency/workflow delta.

Fresh final-head unit coverage passed 1,021 tests in 176 files with 100% statements, branches, functions and lines. Full build, packed-package consumer verification and 173 project-local macOS Office tests passed; Office statements, branches and docstrings remain 100%. The retained package digest remains b666296e207d6636e2610e03d0fe52768650464842b32851035f1356ffc63600.

Browser attempts are deliberately separated:

  • The configured three-worker run passed 134 cases, failed one Firefox Simplified Chinese case in the existing afterEach network-idle wait, and did not execute the dependent consensus case. The captured page contains the expected Chinese text; there was no content-comparison failure. This run is not GREEN.
  • The unchanged affected case passed in a separate one-worker diagnostic with a retained trace.
  • A fresh full --workers=1 run passed all 136 cases, with zero unexpected, skipped or flaky results and no global errors. The receipt binds this candidate and run bb01045b-3ecf-4720-bff1-ad9937034352.

No fixture, assertion, timeout, production source or checked-in worker configuration was changed to obtain the final pass. The shared 10-core M5 host was observed at load averages 28.12/25.90/16.77 during diagnosis; contention is a plausible explanation, not a proven causal attribution. Retain the initial failure in the attempt denominator. The final result establishes bounded-worker local execution, not proof that the default/hosted configuration is reliable under all load.

The package digest is separate from these source-harness runs; installed-tarball identity, real OS-IME/physical-device behavior, a 20ms performance target, protected integration and release are not established here. Local Office dependencies remain distinct from the Linux-only CI wheel lock. #151 must inherit this parent and regenerate its own exact-head proof. Keep Draft, parent-before-child integration and all existing live gates; no approval, merge, tag, publication or bypass is claimed.

Signed-off-by: Seongho Bae <me@seonghobae.me>
Signed-off-by: Seongho Bae <me@seonghobae.me>
Signed-off-by: Seongho Bae <me@seonghobae.me>
Signed-off-by: Seongho Bae <me@seonghobae.me>
Signed-off-by: Seongho Bae <me@seonghobae.me>
@seonghobae

Copy link
Copy Markdown
Contributor Author

Selected stylesheet provenance repair — full verification pending

Current candidate: d0e4ad4a6b7a7b51e007185c5a94e104f770ea9c, based on canonical #201
f9a7879b66ea7c9590caa0d0465c84050791aa6c. This remains Draft and does not change
production editor behavior.

Packed JavaScript selection previously left the input editor importing source
CSS and the shared focus/print URL serving rebuilt worktree CSS. A release archive
digest in a receipt therefore did not prove which stylesheet was exercised.
The existing Vite alias map now resolves the shared CSS URL to the selected
extracted package, and the input harness imports that same URL. No server plugin,
dependency, runtime style, public API, test deadline or retry allowance changed.

At test-only baseline 015e4fd2ab5311c47ece1fb4a98e497354660db0, both checks
failed in all three engines: 6 failures, 0 skipped. The returned module IDs
identified the source/build paths, not the selected archive path. The first fixed
focused run passed five cases and hit the unchanged 20-second Firefox editor
evaluation deadline; the unchanged Firefox case then passed alone with a trace.
That diagnostic does not erase the failed run or constitute complete acceptance.
The final candidate additionally rejects an unexpected second stylesheet.

The change also includes tests/browser/specs/stylesheet-identity.browser.spec.ts
and the explanatory docs/TEST_STRATEGY.md /
docs/doctoring/browser-stylesheet-provenance.md updates. These are assurance
documentation, not a competing production owner.

The current local full coverage run is still in progress and has reported a
convergence/lifecycle timeout. An earlier run reported the unchanged 3,000-item
Word-capacity timeout; that complete fixture passed in isolation. Neither is
claimed fixed or attributed conclusively to host load. All failure logs remain
under /private/tmp/inkspan-browser-stylesheet-evidence.hUT89Q.

Fresh complete source-mode and extracted-package browser runs, package-bound
receipts, final coverage/build/package/Office outcomes and direct visual inspection
remain pending. Earlier head evidence does not transfer. Child #151 owns the
actual responsive/forced-colors UI and will integrate this parent non-destructively.
This publication starts normal hosted checks; it is not Ready, merge, release,
physical-device support, a speedup claim or completion of #376.

Signed-off-by: Seongho Bae <me@seonghobae.me>
@seonghobae

seonghobae commented Sep 6, 2026

Copy link
Copy Markdown
Contributor Author

Canonical browser helper integration and retained failures

Standalone upstream transition reproduced: pinned Playwright1.62.0 on a native local HTTP server reaches initial networkidle, completes a late fetch, then loads a child iframe using only browser DOM APIs. The root frame ends with0inflight/idle-self false/no idle event/no timer and a subsequent public idle wait times out as asserted. Script upstream-dom-transition-probe.mjs passed exit0 at the diagnostic directory below; private fields are observed read-only, not patched or invoked. An earlier direct-recalculation probe failed because it checked before client event propagation; that failure is retained, and the round-trip variant separately passed. This demonstrates a framework transition defect with an independently runnable probe, but the original captured Inkspan failure had one frame, so its exact initiating sequence remains unproven. No consumer guard/deadline/dependency change or release acceptance is claimed.

Internal failure-state follow-up (same #359 artifact): all12 serial diagnostic contexts completed, exit1 with one20s timeout. Acquisition1 had0public pending/0internal inflight requests, no pending document, idle-self false, no networkidle lifecycle event and no timer. All20requests had finished; the other11 contexts reached idle. A preceding parallel attempt failed its30s navigation before any snapshot and is retained separately, not counted as12 observations. The exact v1.62.0 upstream tag contains the installed inequality condition; the installed coreBundle.js and npm registry tarball module both hash to3258d1cf334c6afc95f22aa9c292436cb976b391e0437f1359c83b84f0cb9d66. This excludes a byte difference for that module, not all environment differences. The missing-state snapshot narrows the investigation but does not yet prove the causal event sequence. No dependency, product source, guard or canonical deadline changed. Protocol and all observations remain at /private/tmp/inkspan-firefox-request-state.UGGOMq.

New timed-out request-state observation: a fixed12-context diagnostic at the same36037015/77b60ab6 package reproduced one timeout after all12 planned observations (exit1). In acquisition8 the unchanged20s idle wait took20010.505125ms while public listeners showed20request starts,20finished,0failed,0pending,1frame,1openWebSocket and0rejected origins. All output assertions passed;11other waits succeeded. Thus the diagnostic now captures public request quiescence during a failure, rather than only healthy comparisons. It still does not expose the server-side internal request set/timer or prove an engine/WebSocket cause. All observations and the unchanged external-request guard are retained at /private/tmp/inkspan-firefox-request-state.UGGOMq; no full-suite acceptance or source repair is claimed.

Additional current #359 packed observation (2026-09-07): exact36037015e3715d9c1590438bafde888d62487f86, archive77b60ab6903a6124f167dc8f55567ae530db5ee2bbcccf481d698193ae5be4aa. Canonical3worker/0retry full gate terminated exit1 with49passed/1failed/20notrun/70total,0flaky,113.593014s. Firefox active-script failed in its unchanged20s afterEach networkidle wait; incomplete-corpus rejection prevented Firefox/consensus receipts. Chromium/WebKit receipts and all failures are preserved at /private/tmp/inkspan-pr359-child-list.2yBMyH; built CSS matched packed CSS. No guard/deadline/fixture/source change or sanitizer assertion failure is claimed. A separate fixed12-context request-state diagnostic is being acquired, not substituted for the failed full workload.

Additional current #184 packed observation (2026-09-07): exact903b317fc7a7b0d247b6994796340a7bad33163c, archivef30073eabfb5e724b10cca54170b26d18fee96a9ae050317e6b1c7bf8d6fced0, canonical full browser execution retained54passed/1failed/15notrun/70total,0flaky,140.58179s. Firefox unsafe-javascript-link again failed in the existing20-second afterEach networkidle wait; afterAll rejected incomplete corpus evidence, leaving only Chromium/WebKit receipts. This is the main-based older70-case harness, not the154-case descendant suite. No deadline, guard, worker count, retries, source or fixture changed. The first command's unsupported screenshot option failed before tests and was corrected without changing configuration. Logs/JSON/receipts are retained at /private/tmp/inkspan-pr184-freeze-preflight.mwT5PL. The recurring category is corroborated, but its cause remains unproven; no weakened teardown was copied into #184. Separate actual full-editor Visual Inspection found narrow-toolbar clipping and is tracked with existing owner#151, not this teardown issue.

Current #158 consumer evidence (2026-09-07): exact f83d1d9b2b346e4e8c1ff3897e6f54e489f22cf2, archive SHA-256 895b7f8a026c132b594e44f4bc46d1525dd18c6e4b0d454e7d44215713f5bffd, canonical packed suite retained 137 passed / 2 failed / 15 not run / 154 total, 232.440474s. Both Firefox failures were afterEach network-idle timeouts (unsafe-javascript-link corpus and native-form editability revocation during composition); no complete Firefox/consensus receipt. Six three-engine normal/forced 320px image-focus frames were directly inspected successfully; visual success is separate from full acceptance.

An unchanged two-file Firefox trace diagnostic retained 3 passed / 1 failed / 18 not run / 22 total, 81.757918s, reproducing the same teardown failure on active-resource-and-form. Its body assertions finished at 61743.902ms, the network-idle wait began at 61749.415ms, and the hook failed at 81751.786ms: this acquisition had a full teardown budget, not merely a late body finish. Recorded HTTP resources returned200; installed Playwright1.62.0 Firefox code separates TYPE_WEBSOCKET from ordinary in-flight tracking. A further protocol-plus-trace diagnostic passed all22 in66.715245s, with468 request starts all terminal (446 finished,22 same-origin favicon aborts). It did not reproduce the failure and does not establish the failed acquisition's internal request/lifecycle state. No deadlines/guards/config/source were changed, no WebSocket cause or fix claimed. All failures, successful comparisons, traces and redacted protocol logs are retained at /private/tmp/inkspan-pr158-postprompt-full.4yyRpG. This remains the #380 browser-owner boundary; do not copy a weakened teardown into #158.

Additional #379 lifecycle evidence: current 7fb20686 packed full run
retained52pass/1Firefox failure/17notrun. hidden-office-eof-comment content
assertions all passed; afterEach network-idle wait itself lasted20.089s before
failure. A separate three-context Firefox probe retained zero pending requests
and one open WebSocket in every acquisition, with idle waits318–418ms and
correct output. An open Vite WebSocket alone therefore does not reproduce the
failure. This narrow diagnostic does not replace the failed full workload or
prove a fix; no timeout, security guard or configuration changed. Protocol:
/private/tmp/inkspan-network-idle-probe.W0w7aJ.

Child #151 full-workload failure trace: its unchanged 59d32209 head
selected 154 cases with canonical three workers and trace enabled: 130 passed,
four Firefox failures, 20 not run (255.529388 s). Failed input traces show
page creation 7.25–9.15 s and navigation 6.38–10.60 s; Korean click did not
finish before the test deadline. Other failures include teardown waits.
Concurrent read-only host observation recorded load 32.24 on 10 CPUs; this
supports but does not prove scheduling contention. No other process stopped,
no guard/timeout changed. A full-denominator one-worker diagnostic is pending.
Raw traces remain local: /private/tmp/inkspan-pr151-full-trace.ir4ndN.

The child's one-worker diagnostic subsequently passed all 154 cases in
170.231333 seconds (run bac023d3-9e86-4a73-897e-7ab156b449f1), no skips,
failures or global errors. Host load decreased 16.26 to 8.57 during this run,
so the concurrency effect is confounded. This does not replace the default
three-worker failure or establish a cause. No canonical config was changed.

Latest same-head full trace acquisition: 6a7121e04652348e6dbc7b58bbad843ef07f6f86
passed all 145 canonical packed cases in 80.328312 seconds with --trace on;
zero skipped, unexpected, flaky or global errors. Consensus run
09b96cbc-17a4-4549-9b5b-59f894e2da15 binds archive
948942ff8edd297bf9ea901b099372a8cf0afa477c6fe9a3b24b6e1aed159ef4,
independently rechecked unchanged afterward. Canonical configuration, deadlines,
three workers, zero retries and external-request guards were unchanged.
This full execution did not reproduce the intermittent timeout and does not
prove its cause or erase earlier failures. Child #151 and #158 failures remain
separate. Trace overhead is not a performance improvement. Directly inspected
Firefox native-form frame shows baseline Korean text and focus, not physical
IME proof. Local traces and copied receipts:
/private/tmp/inkspan-pr380-full-trace.im0HN7.

Later head update: 6a7121e04652348e6dbc7b58bbad843ef07f6f86 now adds a
shared expected-archive guard. The detailed 7e231329 results below are retained
predecessor evidence and must not be transferred to this new head. A real
filesystem regression first failed (one failure, five passes) because a supplied
expected package digest with no release directory resolved null. The shared
helper now rejects that case while retaining unconfigured source mode and
matching/mismatched archive-byte validation. The existing release evidence
test covers this behavior; no production editor implementation changes.
New-head focused tests (six), TypeScript and full configured coverage pass:
1,022 tests in 176 files, 132.28 seconds, configured source coverage 100%.
Fresh build and pack passed. The fresh archive is
948942ff8edd297bf9ea901b099372a8cf0afa477c6fe9a3b24b6e1aed159ef4.
The new-head canonical packed browser acquisition failed during startup at the
unchanged 120-second server deadline, before tests executed. This is not a
browser pass; the prior-head 145-case pass does not transfer. Raw JSON/log:
full-packed-6a7121.* in the repair evidence directory. Repair commits preserve
the RED step, normal push history and all earlier failures. Protocol/logs:
/private/tmp/inkspan-pr380-serial-evidence.5moNbo.

A later same-head diagnostic using the existing outside-repository prebuilt
server configuration ran 143 cases successfully, but Firefox Korean committed
input timed out in its unchanged network-idle afterEach and consensus did not
run (145 selected, 99.918626 seconds). Raw prebuilt-full-6a7121.* and copied
receipts are retained. The error-context snapshot preserves the exact Korean
text; it is not a screenshot or full visual acceptance. This shows that removing
build preparation alone does not establish acceptance. No canonical startup,
test deadline, request guard or assertion was changed.

Independent current-head build restoration and the complete verify:package
chain subsequently exited 0, including isolated ESM/CommonJS/strict TypeScript
consumers and framework-free subpaths. Restored editor CSS matches the selected
archive bytes. This is package-consumer proof, not the missing browser pass.

The same-head Firefox composition file subsequently passed all 16 cases with
trace in 14.5 seconds using the diagnostic prebuilt wrapper. Direct inspection
of the Korean trace frame showed intact text and focus. This narrower pass does
not replace either full-suite failure or establish the timeout cause.
Local Office on Python 3.14.6 also passed 173 tests (1.93 seconds), configured
598 statements/244 branches and public docstrings all 100%; not a hosted matrix.

Candidate 7e231329f8efed484e61e0c29e42e18527142d4d adds the source/package
collaboration alias, a lazy actual-renderer probe, and its normal-color regression
to this browser-harness owner. Child #151 integrates it by a normal signed-off
merge and has no remaining net changes to the shared harness, Vite configuration
or stylesheet-identity spec. There is no production src/** change in this update.

The reason is concrete: #151's real collaboration renderer supplies inline
colors that its earlier hand-written cursor fixture omitted. Using the real
renderer exposed a forced-palette failure in all three engines. #151 owns that
stylesheet repair and visual acceptance; this PR owns the reusable browser
selection and probe. The dynamic import runs only when that probe is requested.

The earlier d0e4ad4a6b7a7b51e007185c5a94e104f770ea9c full coverage run is
now terminal: 1,017 passed, 4 failed, all four failures at the unchanged
5-second test deadline. Three are collaboration cases and one is controlled
replacement-policy handling. Its 1,351.90-second log remains retained as
final-coverage.log; it is not a green or still-running result.

At current 7e231329, both affected files pass in isolation: 11 passed,
2.90 seconds, without changing code, assertions, fixtures or deadlines.
That diagnostic does not erase the failed full run or prove its cause.
A new complete current-head coverage run with two workers is now terminal:
1,021 passed, 176 files, 69.07 seconds, with configured statements,
branches, functions and lines all 100%. The failed predecessor run remains
retained and no test deadline, assertion or fixture was weakened.

The integrated child cc766fd6faf80aacea114ce7702e7f84190632bb passed its
154-case standard source and 154-case standard packed browser suites, including
these three-engine selection/normal-color checks. Those are child-head results,
not substitutes for this parent's own current-head full receipts.

Current parent acceptance now includes 145/145 source browser cases, no skips
or global errors; run 4c01b1b5-8687-4bd4-a80a-baa2bd419bc2. Package verification
and isolated consumers pass. Local Office checks pass 173 tests, with
598 statements and 244 branches at 100% and public docstrings at 100%.

The current packed browser run failed: 131 passed, 3 failed, 11 did not run,
567.288 seconds, zero global errors. Firefox table-parser-repair, Traditional
Chinese committed input and Vietnamese committed input reached the unchanged
20-second deadline in their network-idle teardown. Serial successors and the
final consensus did not run. This is not packed acceptance. The retained archive
SHA-256 is 2ab270aa331dc6fd996130da3450a1f1105a9ee6f197b8bf2edd154a28377700;
raw output is final-packed-browser-7e231.json / .log. The complete affected
Firefox specs were then diagnosed with tracing, unchanged fixtures/deadlines and
the same head/archive. Standard startup failed at its unchanged 120-second limit
with 0 tests executed and 1 global error (firefox-packed-trace-7e231.json).
A separately completed exact-head build plus a diagnostic-only prebuilt-server
wrapper then produced 8 passed, 9 failed, 19 did not run, 658.694 seconds
(firefox-prebuilt-trace-7e231.json), zero global errors. It does not replace the
full-suite denominator or satisfy canonical startup acceptance.

Traces include failures before product assertions: one browser launch took
15.55 seconds and page creation 10.21 seconds. The Korean case's committed-text
assertion completed and direct inspection of its captured frame showed intact
text and the focus border, but teardown still timed out. These observations do
not establish the timeout's root cause or prove physical IME behavior. All
deadline, request-guard, corpus and consensus checks remain unchanged. Trace
archives stay local pending privacy review; only aggregate diagnostics are
reported here. Packed acceptance remains open.

Draft hosted checks at this current head were skipped, not green. There is no
current-head independent formal review. Both PRs remain Draft/Proposed; no protected merge, release, physical
device claim or security-gate change is implied. Retained local evidence lives
under /private/tmp/inkspan-browser-stylesheet-evidence.hUT89Q.

Later unchanged full packed acquisition

The same current head and archive subsequently passed 145/145 canonical
packed browser cases in 70.916448 seconds, with no skipped, unexpected, flaky
or global errors. Run 9a70bee7-5f0f-4d5a-bdfc-6f4540128f0d links the exact
head and archive above in all three engine receipts. No other heavy local
job started by this agent overlapped; configuration, three workers, zero
retries, fixtures, deadlines and assertions remained unchanged. This supplies
current parent packed acceptance, without erasing earlier failed acquisitions
or establishing their root cause.

Separate 390x844 packed-harness screenshots were directly inspected in all
three engines. Korean, Japanese, Simplified/Traditional Chinese, Vietnamese
and the emoji sample remain visible without clipping and with an intact focus
boundary. This is committed-text/browser emulation, not physical OS IME proof.
New protocol, raw results, copied receipts and screenshots are retained under
/private/tmp/inkspan-pr380-serial-evidence.5moNbo. Protected merge, independent
review, hosted acceptance and release remain separate unmet gates.

Signed-off-by: Seongho Bae <me@seonghobae.me>
Signed-off-by: Seongho Bae <me@seonghobae.me>
@seonghobae

Copy link
Copy Markdown
Contributor Author

Fresh browser assurance attempt for exact head 6a7121e: installed the pinned browser lock (@playwright/test 1.62.0) and invoked the Chromium project. The configured web server never became ready within 120 seconds while running the full root build command, so no browser test or screenshot is claimed. The first failed attempt also exposed a local pnpm version mismatch; rerunning with the repository-pinned pnpm removed that mismatch but still timed out during web-server startup. This is an acquisition/infrastructure failure, not a passing UI result.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Root-cause follow-up for exact head 6a7121e: standalone pnpm build reached the repeated Vite declaration-generation builds (editor, collaboration, converter, envelope, revision-evidence, autosave) but exceeded a 180-second watchdog before completing. The configured Playwright webServer timeout is 120 seconds, so its earlier timeout is reproducible as a build-duration mismatch rather than a browser assertion failure. No browser pass or visual release evidence is claimed; the performance/CI owner should either cache/prebuild the package or set an evidence-backed timeout after measuring the complete build.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Repair pushed non-force to the PR branch at new exact head 3f078e5d3b1b3fddc74f9cbdc7644d10e5a4f3f (commit test(browser): allow measured package build envelope). The Playwright webServer timeout is now 300 seconds, above the observed sequential package-build envelope; the change only prevents a premature harness timeout and does not relax browser assertions. pnpm exec tsc --noEmit and git diff --check passed. Hosted checks/reviews must rerun for this new head.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Correction: the pushed exact head is 3f078e5df0171df005155798f795ee8943e03576 (the previous comment abbreviated the wrong suffix). GitHub PR head and local git rev-parse HEAD now match this SHA.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Post-push exact-head check: GitHub reports head 3f078e5df0171df005155798f795ee8943e03576, but CI, cross-engine Playwright, and Office checks are all SKIPPED because this PR remains Draft. The timeout repair is therefore locally typechecked only; no hosted browser or release evidence exists yet.

The unchanged Chromium acquisition still timed out at 300 seconds before any browser tests ran.

Co-Authored-By: Codex <noreply@openai.com>
Signed-off-by: Seongho Bae <me@seonghobae.me>
@seonghobae

Copy link
Copy Markdown
Contributor Author

Browser acquisition follow-up for c8b392c:

The 300-second startup experiment failed and was reverted by an ordinary commit. A local diagnostic config substitutes the existing stylesheet copy for the full build prefix; this config is uncommitted and is not release acceptance.

With that diagnostic config, the stylesheet/native-form slice produced 4 passes and 1 timeout. A subsequent single-worker traced native-form run produced 2 timeouts (exit 1), preserving the 20-second test limit. The first trace spends 15.902 seconds in Before Hooks; the second spends 20.470 seconds there, including 10.156 seconds launching the browser. Neither trace records completed navigation. In the second trace, the reported remount attribute assertion starts after Worker Cleanup begins. These traces do not establish a completed remount transition followed by a product regression.

Local trace archives and timing analysis are retained in /private/tmp/inkspan-composition-recheck. A separate 390px Chromium screenshot of the mounted source editor was visually inspected, but it does not prove the failed interaction scenarios or packed-release acceptance. No assertion threshold or production behavior was changed.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Current-head browser diagnostic, not merge acceptance

Head c8b392ce305c89ea183ea832870e6974b4828128, local source-mode Vite diagnostic configuration, one Chromium worker, two native-form composition specs, unchanged 20-second test timeout and external-request denial:

  • Trace enabled: two timeouts. Before hooks consumed 7.778/11.794 seconds and navigation 17.649/21.420 seconds. Navigation completed after teardown started; later text snapshots cannot establish passing assertions.
  • Trace disabled: two passed, terminal exit 0, total runner duration 1.5 minutes. No implementation or acceptance-timeout change.
  • An interleaved trace-enabled repeat is still running. The comparison is affected by shared-host load and caches and does not prove instrumentation is the sole cause.
  • Direct visual inspection of the captured frame showed the initial empty editor only; no visual IME success claim.

Fresh GitHub snapshot: this PR is Draft; build-and-test, cross-engine clipboard, and Office checks are SKIPPED. Successful review statuses and mergeStateStatus=CLEAN do not establish the missing test acceptance. Packed artifact, cross-browser, and complete input/IME acceptance remain outstanding.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Follow-up acquisition isolation on unchanged head c8b392c:

  • Source-mode WebKit: both native-form composition tests passed.
  • Source-mode Firefox: both timed out during page preparation, with a secondary null-page cleanup error; editor behavior was not verified.
  • Direct Firefox control run, with no server/navigation/editor/trace: launch 6.477 s, blank page ready 32.071 s cumulative, abort-all request route ready 32.594 s cumulative; terminal exit 0.

This single control sample establishes that local browser acquisition can exceed the test's 20-second budget without Inkspan execution. It is not a latency distribution or a justification for changing editor code, weakening network isolation, or declaring browser acceptance. The source-mode and packed-artifact gates remain separate; canonical CI remains skipped while this child is Draft. The previously running trace-enabled repeat finished with one pass and one timeout, further showing variable acquisition cost.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

maintenance priority: medium Normal-priority or P2 work status: draft Draft pull request type: test Test coverage, fixtures, fuzzing, or validation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

test(input): add cross-engine CJK IME, touch, and mobile editing assurance

1 participant