Skip to content

fix(timeline): wrap event titles at grapheme boundaries - #1149

Open
BlueboxC wants to merge 6 commits into
tt-a1i:devfrom
BlueboxC:codex/timeline-title-graphemes-20261028
Open

BlueboxC wants to merge 6 commits into
tt-a1i:devfrom
BlueboxC:codex/timeline-title-graphemes-20261028

Conversation

@BlueboxC

@BlueboxC BlueboxC commented Oct 28, 2026 •

Copy link
Copy Markdown

Problem and value

Related: #1067 (event-title follow-up: #1067 (comment)).

Wrapping an event title containing repeated flags, skin-tone modifiers or combining characters can split one visible character across lines. Segment event titles into Unicode graphemes before wrapping, preserving the complete authored text.

The maintainer accepted this bounded scope in the scope review. PR #1032 segments header ellipses and adjusts multi-year/header layout; it does not change event-title wrapTitle. This proposal touches only event-title wrapping and uses a distinct segmenter constant.

Contributor review

  • Problem origin: synthetic replay/code inspection of the linked public report; no production incident or real Agent generation benchmark is claimed.
  • I reviewed the submitted changes and explanation, understand their impact, and can answer questions about them. Validation results and gaps are recorded below.

The accountable contributor explicitly confirmed personal review of this candidate, its explanation and visible results on 2026-10-29.

Stability impact

Renderer behavior for the affected diagram type. The change is bounded to the behavior described above. Test-value review selected observable content/URL/acceptance regressions rather than implementation snapshots: each new regression fails on the base and passes with this fix. Existing related coverage is reused. No separate simplify-codebase refactor was needed for this local correction; no speculative abstraction or configuration is added.

Tests run

Base: 847146aeb93b492592adb78dc220f57e4a8b4636 (dev). Candidate: 90ba9582db3d1350de37693689934d40b930384c.

Node 22.23.2, macOS arm64, zlib 1.3.1-e00f703:

  • Base plus the new test: node --test test/timeline-title-graphemes.test.mjs — fails, exposing the reported behavior.
  • Candidate: npm run test:focus -- test/timeline-title-graphemes.test.mjs test/timeline-rendering.test.mjs test/timeline-dst-ticks.test.mjs — passes.
  • npm test and npm run test:generated — pass.
  • git diff --check — passes.
  • Canonical bash scripts/build-zip.sh — passes; extracted ZIP smoke passes for the changed behavior.

These are fixed-input regressions and scoped core/generated checks. The local results above retain their original scope. No real-repository Agent generation benchmark is claimed. The current remote CI results are recorded below.

Visual evidence

Reproduce using the fixture embedded in test/timeline-title-graphemes.test.mjs with the CLI renderer on the base and candidate. Real Chrome at 1440×900, light theme, identical input and page state was checked separately from the Node regression.

For an event title of 🇪🇸.repeat(15), the base splits a flag across line boundaries; the candidate retains complete flag graphemes and the full title. The automated regression also covers family emoji, skin-tone modifiers and combining characters.

Automated/browser content checks pass. The contributor has now confirmed personal review of the visible result as well as the change and explanation.

Generated artifacts

Regenerated archify.zip from the candidate source using the canonical Node/zlib toolchain. SHA-256: 42334db37f467ad21984204dba78472ed00c47bd450ddf8604d312b8bc133782. The extracted distribution was exercised; no release or deployment is requested by this PR.

Review status at the previously reviewed head

CI run 40764496534 on the candidate above has 16 successful jobs and no failures. The four skipped jobs are full-regression, website and the two deployment jobs, according to the existing scope policy; their coverage is not claimed as executed. Windows portability (Node 22/24), package smoke (Linux/macOS/Windows), browser shards, Node 18/20/22/24, ZIP freshness and artifact checks passed. With scope agreement and personal review confirmed, this candidate is ready for review. Integration should follow #1150 then #1151. Keep coordination with #1032 and #1067 limited to integration overlap; this event-title fix does not propose a broader Unicode/CJK layout system.


Devin Review

Current integration · 31 October

Head b06becbdb999fc0b56471ab3d50aacde660b53e7 includes maintainer #1173 and dev 63c9263e84bd3993cab8e09b3d69888857858635. The original correction and test blobs remain byte-identical to 90ba9582db3d1350de37693689934d40b930384c; the existing personal confirmation retains that scope. The combined ZIP was regenerated and checked against the complete Skill tree.

Local qualification on tree edf954e48764bb531530b5cd8b515ed4cf6e2477: generated/golden checks,19 core smoke cases,26 focused Sequence cases including Chrome, this PR's focused regression and clean-package smoke. The later integration of #1174 changes only the README GIF and receipt: the unchanged README/Gallery tests pass15 cases with one native Windows-only local skip on final tree c573026c0db80a2bf017b1852afccd792c0b22c8. All three input-artifact hashes match the separately recaptured #1174 animation. Source, tests and ZIP are unchanged by that second step. The earlier README freshness failures remain visible in the previous CI runs.

CI41175244794 passed on this exact public head: 17 successful jobs, 3 expected skips, no failures. The complete regression lane was skipped by the existing scope policy; it is not counted as executed. Windows path-test steps: (Node 22) skipped; (Node 24) skipped; skipped steps are not counted as native test execution. Deployment jobs were skipped. The separate generated-media PR1174 received its own explicit personal confirmation on 2026-10-31. The existing confirmation for this PR's mechanical integration is preserved through identical original correction blobs.

Test-coverage follow-up · 31 October

Current head: f9d2d438b57eec3e6d650d90a3ca5660f1f33f1a, tree 98b0ef6406c51621ceb4dea485affcd2e54bba1c. This addresses the coverage note in review5721590528; the current runtime was not found defective. A controlled renderer fault returning a single unwrapped title passed the old test. Each existing long-title fixture now requires more than one line before checking complete authored content and graphemes. All four already wrap on the correct renderer; no fixture, renderer or exact line count is changed.

The amended test rejects disabled wrapping and still rejects the original code-point-splitting fault; after restoring the original renderer, all21 affected Timeline tests pass. Core19, generated/golden checks, README/Gallery15pass with one native Windows-only local skip, and diff checks also pass. The published tree matches the tested local tree. Runtime source blob 6d219323ec7c7e20b0a38c9fd61865e3f85d0917, ZIP and all generated media remain byte-identical to the preceding CI-qualified head b06becbdb999fc0b56471ab3d50aacde660b53e7. Only the existing test changes. No added abstraction, shared state, simplify refactor or generation benchmark applies.

The earlier personal confirmation remains fulfilled for the original correction and previous tests. On 2026-10-31, I explicitly confirmed personal review of the new assertion in head f9d2d438b57eec3e6d650d90a3ca5660f1f33f1a, its explanation and recorded tests, and that I can answer for this follow-up. The current contributor checkbox is fulfilled; ready for maintainer review. CI41177230857 passed on this exact head: 17 successful jobs, 3 expected skips, no failures. The complete regression lane was skipped under the existing scope policy. The green Windows scope gates skipped their path-test steps; native Windows execution is not claimed. Deployment jobs were skipped. Earlier runs retain their recorded revisions.

Base integration · 9 November

Current head e39ea6385fa55d097b00b1a91c81af70959b484d integrates canonical dev 3363580956cefa262d9930d886b8d568b6bfa1e1. Git reproduced conflicts only in the README GIF and its receipt. The README GIF/receipt now use the canonical regeneration from merged #1293; all three artifact inputs and the capture generator match this combined tree exactly. The regenerated GIF differs from the historical #1174 bytes; no fresh visual-review claim is made.

The authored correction and regression-test blobs, complete Skill tree and ZIP remain identical to the preceding contributor head. The original commits, credits and fulfilled personal confirmations retain their exact scope; this mechanical integration adds no new substantive correction. Upstream workflow files are imported unchanged. The earlier validation sections above remain historical evidence at their stated revisions.

Fresh scoped local qualification on the exact published tree, using installed Node26 on macOS arm64: 19 core cases pass; generated/Viewer/brand/validator/release/golden checks pass; README/Gallery pass 15 cases with one native-Windows-only skip; diff checks pass. The canonical DSH docs contract also passes 7 cases, reused across these branches only for its identical inputs. No ZIP rebuild, new browser capture, complete local suite, native Windows run or new human visual acceptance is claimed.

Final-head CI 42622464118, attempt1, completed with failure: 14 successful jobs, 2 failures and 4 skips. The complete regression lane and native Windows path-contract steps were skipped by the existing scope rules; green gate jobs do not establish their execution. The failed browser-regression shard2 records the existing compact automatic Sequence header-reflow assertion; its dependent WebM aggregate also fails. The separate correction is already PR #1151, not a new change in this timeline diff. On #1151's exact current head e69dbac, browser shard2 passes that same case and all 169 cases without skips. The prior reproduction and stricter #1151 regression remain preserved; no duplicate fix or identical CI rerun is included. These are fresh hosted results on the exact head above, separate from local and historical qualification. No failure or skip is converted to a pass; no identical rerun, sandbox-policy change or gate waiver was used.

BlueboxC

@coderabbitai

coderabbitai Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Important

Review skipped

Review was skipped as selected files did not have any reviewable changes.

Files ignored due to path filters: 1

  • archify.zip is excluded by !**/*.zip
Run configuration

  • Source mode: Auto
  • Repository: tt-a1i/archify
  • Branch: dev
  • File: .coderabbit.yaml
  • Commit: 3363580
  • Layers: Repository YAML
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 879a52d0-b6fb-4ffc-9a25-2e2b4b4ec61d
Commits

Reviewing files that changed from the base of the PR and between f9d2d43 and e39ea63.

Files ignored due to path filters: 1

  • archify.zip is excluded by !**/*.zip

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Trigger review

No actionable comments were generated in the recent review.

Summary

Event titles now wrap at Unicode grapheme boundaries, so flags, emoji sequences, and combining characters stay intact. The regression test checks that long titles wrap and preserve complete graphemes. The change targets event-title wrapping.

The reviewed range is base 847146aeb93b492592adb78dc220f57e4a8b4636 to head f9d2d438b57eec3e6d650d90a3ca5660f1f33f1a. The author reports passing tests and checks at that head. The author also reports CI run 41177230857 passing with 17 successful jobs and 3 expected skips; the complete regression lane and native Windows path-test steps were skipped. These reports were not independently verified. The checked repository is at the head’s parent, b06becbdb999fc0b56471ab3d50aacde660b53e7; no CI status was observed there. No browser or perceptual acceptance is established.

The timeline renderer now splits overlong titles at Unicode grapheme boundaries instead of code-point boundaries. A regression test checks rendering and verifies that wrapped title lines contain complete family emoji, flag, skin-tone emoji, and combining-mark clusters. The live-proof manifest records an updated GIF size and hashes.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related issues

Merge Risk: Minimal · previous review f9d2d

No concrete merge-blocking risk was identified in the focused wrapping change.

Pre-merge checks: Passed 1 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Contribution Scope Warning The timeline fix and regression test are focused and linked to issue #1067. The reviewed range also changes the unrelated README showcase: docs/assets/archify-live-proof.gif and its manifest change … Remove the README GIF and manifest changes, or record explicit maintainer approval for that additional slice. Update the PR description to list every changed generated artifact and state compatibility, migration, failure, and rollback impac…
Passed Passed checks: 1 passed

Check name Status Explanation
Validation Evidence Passed Evaluated head f9d2d438b57eec3e6d650d90a3ca5660f1f33f1a. The final diff changes timeline wrapping from code points to Intl.Segmenter graphemes and adds a regression test that requires actual wrapp…
Full details: Validation Evidence

Explanation

Evaluated head f9d2d438b57eec3e6d650d90a3ca5660f1f33f1a. The final diff changes timeline wrapping from code points to Intl.Segmenter graphemes and adds a regression test that requires actual wrapping, preserves the title, and checks complete graphemes. The author reports final-head validation for 21 Timeline tests, 19 core cases, generated checks, and 15 README/Gallery cases, plus CI run 41177230857 with 17 successful jobs. I observed that the final manifest matches the GIF byte count and SHA-256, all three artifact hashes match, and the ZIP renderer matches the tracked renderer. The final follow-up changes only the test assertion after b06becb; generated outputs and the ZIP are unchanged. Earlier candidate-only results are not used as final-head evidence. Prior failure addressed: Final-head evidence is now reported for f9d2d438, and the final manifest and ZIP were independently checked. The earlier 90ba958-only evidence is not used to validate the final head.

Full details: Contribution Scope

Explanation

The timeline fix and regression test are focused and linked to issue #1067. The reviewed range also changes the unrelated README showcase: docs/assets/archify-live-proof.gif and its manifest change in commits 355ea38 and b06becb. The commit messages describe a Sequence-centering refresh, not timeline wrapping. The visible PR description documents only archify.zip under generated artifacts and says the proposal is limited to event-title wrapping. No maintainer scope decision for this additional delivery slice is available in the repository evidence.

Resolution

Remove the README GIF and manifest changes, or record explicit maintainer approval for that additional slice. Update the PR description to list every changed generated artifact and state compatibility, migration, failure, and rollback impact, including when those impacts are unchanged. The full PR description is truncated in the supplied context, so confirm that the latest text contains this information.

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

Recent review info

Run configuration

  • Source mode: Auto
  • Repository: tt-a1i/archify
  • Branch: dev
  • File: .coderabbit.yaml
  • Commit: 63c9263
  • Layers: Repository YAML
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: dc90f151-f87d-4ad5-8328-d2be280e511b
Commits

Reviewing files that changed from the base of the PR and between b06becb and f9d2d43.

Files selected for processing: 1

  • test/timeline-title-graphemes.test.mjs

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 8 remain after this review.

@BlueboxC
BlueboxC marked this pull request as ready for review October 29, 2026 09:28
Preserve the original correction while regenerating the combined source package.

BlueboxC

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔍 Devin Review: 1 flag

Not posted on this PR by your GitHub settings — view it in Devin Review. (Configure)

Devin Review

Recapture the existing scenes from the current gallery artifacts after upstream PR tt-a1i#1173.

BlueboxC
Retain the original correction and upstream Sequence centering; bind the animation to the combined gallery artifacts.

BlueboxC
coderabbitai[bot]

This comment was marked as resolved.

Protect the fixture precondition without fixing a line count or changing the renderer, inputs, or content assertions.

BlueboxC
@BlueboxC
BlueboxC marked this pull request as draft October 31, 2026 06:35

Copy link
Copy Markdown
Author

Addressed the wrapping-precondition coverage note in f9d2d438b57eec3e6d650d90a3ca5660f1f33f1a. The same four long-title fixtures now explicitly exercise multiple lines before checking content and complete graphemes, without fixing an exact line count. A lab-only unwrapped-output mutation passed the old test and is rejected by the new assertion; the original code-point-splitting fault is still rejected. Renderer, fixture inputs, ZIP and media remain unchanged. All21 affected Timeline tests,19 core cases, generated checks and15 README/Gallery cases pass, with one native Windows-only local skip. CI41177230857 passes on this exact head:17 successful jobs and3 expected skips. The complete lane and native Windows path-test steps were skipped and are not claimed as executed. The earlier personal review is preserved; Draft awaits confirmation only for this new assertion.

BlueboxC

Integrate the published DSH fixes and documentation without changing the
previously reviewed correction, regression tests, Skill tree or ZIP.
Use the canonical README proof from merged upstream tt-a1i#1293; all three
artifact inputs and the generator match this combined source exactly.

BlueboxC

This branch has not been deployed

No deployments
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