Skip to content

submit for GH review#43

Merged
magmacomputing merged 6 commits into
mainfrom
feature/docs-tidy
Jun 13, 2026
Merged

submit for GH review#43
magmacomputing merged 6 commits into
mainfrom
feature/docs-tidy

Conversation

@magmacomputing

@magmacomputing magmacomputing commented Jun 13, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • New Features

    • Chained format modifiers (:lower, :upper, :title, :ord, :locale), auto-localization for formatting, opt-in localized parsing, and a read-only Tempo.registry accessor.
    • Locale-aware token rendering, localized snippet generation, and a new toTitleCase helper.
  • Documentation

    • New registry docs, expanded cookbook and config docs, and updated release notes reflecting v3.1.0 features.
  • Chores

    • Version bumped to 3.1.0; added/updated localization-focused tests.

@coderabbitai

coderabbitai Bot commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@magmacomputing, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 8 minutes and 30 seconds. Learn how PR review limits work.

Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file).

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: ec3bb4b7-843e-420f-be65-a64eb75ed329

📥 Commits

Reviewing files that changed from the base of the PR and between 3460b79 and cf0a04c.

📒 Files selected for processing (4)
  • packages/tempo/doc/tempo.cookbook.md
  • packages/tempo/doc/tempo.parse.md
  • packages/tempo/plan/localized_modifiers.md
  • packages/tempo/src/tempo.class.ts
📝 Walkthrough

Walkthrough

Tempo v3.1.0 refactors configuration around a nested registry namespace, adds chained format modifiers (:lower, :upper, :title, :ord, :locale), enables auto-localization for parsing/formatting, introduces Tempo.registry, and updates international/string helpers and docs. Packages bumped to 3.1.0.

Changes

Tempo v3.1.0 Registry Refactoring and Format Modifiers

Layer / File(s) Summary
Library foundation and type system restructuring
packages/library/package.json, packages/library/src/common/international.library.ts, packages/library/src/common/string.library.ts, packages/tempo/src/tempo.type.ts
Exported Intl helpers (getDTF with options, formatDayPeriod), changed canonicalLocale to return undefined on invalid locales, added toTitleCase, and restructured Tempo types to add registry, format/parse localize flags and mark flat formats/locales deprecated.
Tempo class, configuration, and registry infrastructure
packages/tempo/src/tempo.class.ts, packages/tempo/src/support/support.enum.ts, packages/tempo/src/support/support.init.ts, packages/tempo/src/plugin/term/term.type.ts, packages/tempo/src/plugin/term/term.timeline.ts
Added Tempo.registry getter and adjusted discovery/init to populate nested registry (formats/locales). Introduced LOCALE registry and wiring in defaults/state/exports, extended term types with optional locale, and prototype-shadowed config branches in init/extend to isolate registry/format overrides.
Format token engine with modifier support and auto-localization
packages/tempo/src/support/support.default.ts, packages/tempo/src/module/module.format.ts, packages/tempo/src/support/support.util.ts, packages/tempo/test/discrete/format.test.ts, packages/tempo/test/engine/meridiem.test.ts
Expanded Match.formatBraces regex to capture :modifier chains. Format module now parses chained modifiers, auto-injects locale modifier when enabled, delegates locale-aware rendering (months/weekdays/meridiem via Intl and formatDayPeriod), resolves localized terms from registry.locales or plugin dictionaries, and tests verify meridiem casing and French auto-localization. Also added memoized localized snippet generator.
Parser, alias/normalizer, and localized parsing flow
packages/tempo/src/module/module.parse.ts, packages/tempo/src/engine/engine.normalizer.ts, packages/tempo/src/engine/engine.alias.ts
Parsing basis computation refactored for Tempo/ZonedDateTime/other inputs, $guard can be bypassed when parse.localize is enabled, alias engine can fork and accept duck-typed parents, and normalizer now pre-normalizes localized weekdays/months via localeMap.
Documentation, release notes, and user guides
packages/tempo/.vitepress/config.ts, packages/tempo/CHANGELOG.md, packages/tempo/doc/releases/*, packages/tempo/doc/tempo.*.md, packages/tempo/doc/tempo.registry.md
Added registry documentation, updated changelog and release notes for v3.1.0/v3.x/v4.x roadmap, updated config examples (license, frozen discovery payload, registry), expanded cookbooks with auto-localized parsing and modifier usage, and added VitePress sidebar link to Registries.
Manifest and tests alignment
package.json, packages/library/package.json, packages/tempo/package.json, packages/tempo/src/tempo.version.ts, packages/tempo/test/*
Bumped versions to 3.1.0 across manifests, updated tempo repl script and dependency pin, adjusted TEMPO_VERSION, added localized parsing/format tests and ensured ParseModule registration for test suites.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Possibly related PRs

Poem

🐰
Registries nested, tokens chained with care,
Locale whispers carried through mer and hour,
Modifiers hop — upper, ord, and fair,
Docs and tests updated for this new power,
Version 3.1.0 leaps forward with a happy flair.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive The title 'submit for GH review' is vague and generic, using non-descriptive language that does not convey meaningful information about the substantive changes in the pull request. Replace with a descriptive title summarizing the main change, such as 'Release v3.1.0 with localization and formatting modifiers' or 'Add registry-based configuration and locale support'.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed Docstring coverage is 86.67% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/docs-tidy

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 and usage tips.

@coderabbitai coderabbitai 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.

Actionable comments posted: 4

🧹 Nitpick comments (1)
packages/tempo/test/discrete/format.test.ts (1)

87-89: ⚡ Quick win

Add scoped-term localization coverage ({#timeOfDay}) in this suite.

Current assertions cover {#tod} but not the scoped accessor form. Adding one expectation here will guard the object-backed term localization path from regressions.

Suggested test addition
   it('should automatically localize Terms', () => {
     expect(t.format('{`#tod`}')).toBe('Milieu de la matinée');
+    expect(t.format('{`#timeOfDay`}')).toBe('Milieu de la matinée');
   })
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/tempo/test/discrete/format.test.ts` around lines 87 - 89, Add an
assertion in the same test ("should automatically localize Terms") to exercise
the scoped-term accessor form by calling t.format with the scoped key string
'{`#timeOfDay`}' and expecting the same localized string as '{`#tod`}' (e.g.,
'Milieu de la matinée'); this ensures the object-backed term lookup path (the
t.format function and the scoped accessor '{`#timeOfDay`}') is covered alongside
the existing '{`#tod`}' case.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/tempo/doc/tempo.cookbook.md`:
- Around line 242-245: The example sets localize: true at the top level of
Tempo.config but runtime reads config.format.localize, so update the example to
set the localize flag under the format object when calling Tempo.config (i.e.,
use Tempo.config({ locale: 'fr-FR', format: { localize: true } })) and ensure
this matches how the code checks config.format.localize in the Tempo
implementation.

In `@packages/tempo/src/module/module.format.ts`:
- Around line 167-187: The localization lookup currently forces termVal to a
string via String(termVal) which breaks object-backed term values (e.g., scoped
accessors returning objects) causing lookups for "[object Object]"; update the
logic around valStr in the block handling token.startsWith('#') (where termKey,
termName, termVal, plugin are used) to first detect object-backed termVal and
derive a proper lookup key (e.g., prefer termVal.key, termVal.id, or a
designated lookup property) or otherwise serialize deterministically, and only
fall back to String(termVal) for primitives—then use that derived key for the
registry and plugin group locale lookups (flatGroups/group -> locale) so
object-backed terms resolve correctly.

In `@packages/tempo/src/support/support.init.ts`:
- Around line 40-43: The nested-shallow copies for state.config.registry and
state.config.format are being lost later when state.config gets replaced again
through the local baseState path, allowing writes to leak into
baseState.config.registry; fix by ensuring every time state.config is cloned
from baseState.config (including the later replacement path) you also create
fresh nested shadow objects for registry and format (e.g., using
Object.create(baseState.config.registry) /
Object.create(baseState.config.format) or an equivalent shallow clone) and
similarly preserve state.parse cloning (state.parse =
Object.create(baseState.parse)) so that no nested references to baseState stay
shared.

In `@packages/tempo/src/tempo.class.ts`:
- Around line 764-768: The current registry default uses config.registry ??
{...} which lets a partial registry object override both fields; change to
normalize each registry field individually so formats and locales are resolved
per-field (e.g., use config.registry?.formats ?? config.formats ??
enumify(STATE.FORMAT, false) and config.registry?.locales ?? config.locales ??
proxify(STATE.LOCALE, true, true)) so accesses like
this.#local.config.registry.formats[key] never encounter an undefined formats
object; keep the existing format default (config.format ?? { localize:
config.localize ?? false }) but ensure registry.formats and registry.locales are
set independently.

---

Nitpick comments:
In `@packages/tempo/test/discrete/format.test.ts`:
- Around line 87-89: Add an assertion in the same test ("should automatically
localize Terms") to exercise the scoped-term accessor form by calling t.format
with the scoped key string '{`#timeOfDay`}' and expecting the same localized
string as '{`#tod`}' (e.g., 'Milieu de la matinée'); this ensures the
object-backed term lookup path (the t.format function and the scoped accessor
'{`#timeOfDay`}') is covered alongside the existing '{`#tod`}' case.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 791ca747-ecfa-4ba4-8b12-0868c84eccaf

📥 Commits

Reviewing files that changed from the base of the PR and between 9c8e51e and 315f445.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (24)
  • package.json
  • packages/library/package.json
  • packages/library/src/common/international.library.ts
  • packages/tempo/.vitepress/config.ts
  • packages/tempo/CHANGELOG.md
  • packages/tempo/doc/release-notes-v3.0.0.md
  • packages/tempo/doc/releases/index.md
  • packages/tempo/doc/releases/v3.x.md
  • packages/tempo/doc/releases/v4.x.md
  • packages/tempo/doc/tempo.config.md
  • packages/tempo/doc/tempo.cookbook.md
  • packages/tempo/doc/tempo.registry.md
  • packages/tempo/package.json
  • packages/tempo/src/module/module.format.ts
  • packages/tempo/src/plugin/term/term.timeline.ts
  • packages/tempo/src/plugin/term/term.type.ts
  • packages/tempo/src/support/support.default.ts
  • packages/tempo/src/support/support.enum.ts
  • packages/tempo/src/support/support.init.ts
  • packages/tempo/src/tempo.class.ts
  • packages/tempo/src/tempo.type.ts
  • packages/tempo/src/tempo.version.ts
  • packages/tempo/test/discrete/format.test.ts
  • packages/tempo/test/engine/meridiem.test.ts
💤 Files with no reviewable changes (1)
  • packages/tempo/doc/release-notes-v3.0.0.md

Comment thread packages/tempo/doc/tempo.cookbook.md Outdated
Comment thread packages/tempo/src/module/module.format.ts
Comment thread packages/tempo/src/support/support.init.ts
Comment thread packages/tempo/src/tempo.class.ts

@coderabbitai coderabbitai 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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/tempo/doc/tempo.cookbook.md (1)

255-256: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Incorrect nesting for locales configuration; must nest under registry.

The locales option must be nested inside registry to match the Tempo type contract. The code currently shows locales at the top level of the config object, but the runtime reads config?.registry?.locales, causing user-provided locale overrides to be silently ignored.

🐛 Proposed fix
 Tempo.config({
-    locales: {
+    registry: {
+      locales: {
         fr: {
             morning: 'Matinée',
             afternoon: 'Après-midi',
             ordinal: (n) => n === 1 ? '1er' : `${n}e`
         }
+      }
     }
 });
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/tempo/doc/tempo.cookbook.md` around lines 255 - 256, The config
example is nesting locales at the top level so user locale overrides are ignored
because the runtime reads config?.registry?.locales; update the Tempo.config
example so that the locales object is placed under a registry key (i.e.,
Tempo.config({ registry: { locales: { ... } } })) so the config matches the
expected shape used by the code that accesses config?.registry?.locales.
🧹 Nitpick comments (1)
packages/tempo/doc/tempo.cookbook.md (1)

242-242: 💤 Low value

Simplify wording: "prior to" → "before".

The phrase "prior to casing modifiers" is slightly wordy; "before casing modifiers" is clearer and more concise.

📝 Proposed fix
-To avoid repeatedly typing `:locale` on every token, you can set `format: { localize: true }` in your global `Tempo.config`. This will automatically append the `:locale` modifier (prior to casing modifiers) for all format evaluations:
+To avoid repeatedly typing `:locale` on every token, you can set `format: { localize: true }` in your global `Tempo.config`. This will automatically append the `:locale` modifier (before casing modifiers) for all format evaluations:
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/tempo/doc/tempo.cookbook.md` at line 242, Summary: replace wordy
phrase "prior to casing modifiers" with the clearer "before casing modifiers".
Locate the sentence that reads "This will automatically append the `:locale`
modifier (prior to casing modifiers) for all format evaluations" and edit it to
"This will automatically append the `:locale` modifier (before casing modifiers)
for all format evaluations" so the wording is more concise and consistent.

Source: Linters/SAST tools

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@packages/tempo/doc/tempo.cookbook.md`:
- Around line 255-256: The config example is nesting locales at the top level so
user locale overrides are ignored because the runtime reads
config?.registry?.locales; update the Tempo.config example so that the locales
object is placed under a registry key (i.e., Tempo.config({ registry: { locales:
{ ... } } })) so the config matches the expected shape used by the code that
accesses config?.registry?.locales.

---

Nitpick comments:
In `@packages/tempo/doc/tempo.cookbook.md`:
- Line 242: Summary: replace wordy phrase "prior to casing modifiers" with the
clearer "before casing modifiers". Locate the sentence that reads "This will
automatically append the `:locale` modifier (prior to casing modifiers) for all
format evaluations" and edit it to "This will automatically append the `:locale`
modifier (before casing modifiers) for all format evaluations" so the wording is
more concise and consistent.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: dfc5e202-810b-4aa9-abc9-d82254e3259d

📥 Commits

Reviewing files that changed from the base of the PR and between 315f445 and 2bd6a48.

📒 Files selected for processing (8)
  • packages/library/src/common/international.library.ts
  • packages/library/src/common/string.library.ts
  • packages/tempo/doc/tempo.config.md
  • packages/tempo/doc/tempo.cookbook.md
  • packages/tempo/src/module/module.format.ts
  • packages/tempo/src/support/support.init.ts
  • packages/tempo/src/tempo.class.ts
  • packages/tempo/test/discrete/format.test.ts
💤 Files with no reviewable changes (1)
  • packages/tempo/doc/tempo.config.md
🚧 Files skipped from review as they are similar to previous changes (5)
  • packages/library/src/common/international.library.ts
  • packages/tempo/test/discrete/format.test.ts
  • packages/tempo/src/tempo.class.ts
  • packages/tempo/src/support/support.init.ts
  • packages/tempo/src/module/module.format.ts

@coderabbitai coderabbitai 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.

Actionable comments posted: 5

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/tempo/src/support/support.init.ts (1)

216-220: ⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

Locale/localize toggles only add localized rules; they never unwind them.

The rebuild path only runs for localize && lang !== 'en', and disabling localization never marks the parser dirty. Once a state has loaded localized snippets/events, switching to localize: false or back to an English locale leaves the old localeMap and aliases in place, so later parses can keep accepting the previous locale.

Also applies to: 231-235, 338-366

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/tempo/src/support/support.init.ts` around lines 216 - 220, The
locale handling only adds localized rules and never removes them; update the
locale change handling (the 'locale' case using canonicalLocale and setProperty
on state.config) to detect when localization is being removed or when the locale
changes back to an English/default locale and then clear any existing
locale-specific state (e.g., localeMap, locale aliases) and mark the
parser/state as dirty so rebuilds run; specifically, after setting the new
locale in setProperty, call the existing rebuild/mark-dirty routine (or add one)
for the parser and explicitly clear or reset any localeMap/alias collections so
disabling localize or switching to 'en' removes previously applied localized
rules.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/tempo/CHANGELOG.md`:
- Line 27: Update the fallback description text in both places to match actual
behavior: replace the current "Global Registry > Plugin Bundled Dictionary >
Plugin Default Label" wording with a clear registry/bundled-dictionary flow that
falls back to the term's existing label/value when neither source resolves
(e.g., "Global Registry > Plugin Bundled Dictionary > term's existing
label/value"); apply this exact rewording at packages/tempo/CHANGELOG.md lines
27-27 and mirror the same wording at packages/tempo/doc/releases/v3.x.md lines
12-12.

In `@packages/tempo/src/engine/engine.alias.ts`:
- Around line 85-89: The constructor currently checks isObject(parent) &&
'registerAliases' in parent then uses (parent as any).#state and .#words which
can throw for non-AliasEngine objects; change the runtime guard to use parent
instanceof AliasEngine (or otherwise validate via a public API) so you only
inherit private state/words from a true AliasEngine; update the branch that
assigns this.#parent, this.#depth, this.#state, and this.#words to cast to
AliasEngine after the new instanceof check and remove the duck-typed
"'registerAliases' in parent" condition.

In `@packages/tempo/src/module/module.parse.ts`:
- Around line 68-74: The branch in module.parse.ts that handles "else if
(isDefined(val))" drops the caller-provided anchor when TempoClass is not
registered; change the fallback so a defined val is preserved instead of
unconditionally using instant(): when TempoClass is present keep the existing
(TempoClass as any).from(val, safeConfig).toDateTime(), and when TempoClass is
absent convert the supplied val into a zoned DateTime using a simple JS->zoned
conversion (e.g., treat val as ISO/number/Date and create a ZonedDateTime in tz
with calendar cal) and assign that to basis; keep the safeConfig handling
(delete safeConfig.anchor) intact. Ensure the code still falls back to instant()
only when val is undefined.

In `@packages/tempo/src/support/support.init.ts`:
- Around line 227-235: The parse option mutations only update state.parse and
leave state.config.parse stale; update both places: in the 'parse' case (where
Object.assign(state.parse, arg.value) runs) ensure state.config.parse exists
(create with setProperty or {}) and merge the same values into
state.config.parse as well; in the 'localize' case, also set
state.config.parse.localize = Boolean(arg.value) in addition to
state.parse.localize so config.parse stays synchronized with state.parse.

In `@packages/tempo/test/discrete/parse.locale.test.ts`:
- Around line 5-11: The test uses Tempo.init(...) in beforeEach but never resets
the Tempo singleton, so prior tests can leak state; modify the setup to clear
the singleton before reinitializing by either calling the provided reset API
(e.g., Tempo.reset() or Tempo.resetRuntime() if available) or explicitly
clearing the internal runtime (e.g., delete Tempo.runtime or set Tempo.runtime =
undefined) and then call Tempo.init({ mode: 'strict', timeZone: 'UTC', calendar:
'iso8601' }) so each test gets a fresh baseline; update the beforeEach in the
test to perform that reset step before calling Tempo.init.

---

Outside diff comments:
In `@packages/tempo/src/support/support.init.ts`:
- Around line 216-220: The locale handling only adds localized rules and never
removes them; update the locale change handling (the 'locale' case using
canonicalLocale and setProperty on state.config) to detect when localization is
being removed or when the locale changes back to an English/default locale and
then clear any existing locale-specific state (e.g., localeMap, locale aliases)
and mark the parser/state as dirty so rebuilds run; specifically, after setting
the new locale in setProperty, call the existing rebuild/mark-dirty routine (or
add one) for the parser and explicitly clear or reset any localeMap/alias
collections so disabling localize or switching to 'en' removes previously
applied localized rules.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 8bf60d7d-bfe5-4735-930d-f7b9c235b640

📥 Commits

Reviewing files that changed from the base of the PR and between 2bd6a48 and 2328f34.

📒 Files selected for processing (12)
  • packages/tempo/CHANGELOG.md
  • packages/tempo/doc/releases/v3.x.md
  • packages/tempo/doc/tempo.cookbook.md
  • packages/tempo/src/engine/engine.alias.ts
  • packages/tempo/src/engine/engine.normalizer.ts
  • packages/tempo/src/module/module.parse.ts
  • packages/tempo/src/support/support.init.ts
  • packages/tempo/src/support/support.util.ts
  • packages/tempo/src/tempo.class.ts
  • packages/tempo/src/tempo.type.ts
  • packages/tempo/test/discrete/parse.locale.test.ts
  • packages/tempo/test/engine/month-day.test.ts
💤 Files with no reviewable changes (1)
  • packages/tempo/test/engine/month-day.test.ts
✅ Files skipped from review due to trivial changes (1)
  • packages/tempo/doc/tempo.cookbook.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/tempo/src/tempo.class.ts

Comment thread packages/tempo/CHANGELOG.md Outdated
Comment thread packages/tempo/src/engine/engine.alias.ts Outdated
Comment thread packages/tempo/src/module/module.parse.ts
Comment thread packages/tempo/src/support/support.init.ts
Comment thread packages/tempo/test/discrete/parse.locale.test.ts

@coderabbitai coderabbitai 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.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/tempo/doc/tempo.cookbook.md`:
- Around line 102-105: Update the tip that currently says setting `locale`
enables translated parsing to explicitly state that localized parsing also
requires enabling the parser option `parse: { localize: true }` (or the
top-level `localize: true`) at runtime; change the text in the tip to mention
both the `locale` configuration and the required `parse.localize`/top-level
`localize` flag so users know they must enable localization in parsing as well
as set the locale.

In `@packages/tempo/doc/tempo.parse.md`:
- Around line 135-149: Example "new Tempo('vendredi prochain')" conflicts with
the documented limitation that affix/connectors (like "next") are English-biased
when using parse: { localize: true }; update the example and text to avoid
implying localized connector parsing works automatically by either replacing
that example with a purely localized token that Intl provides (e.g., "new
Tempo('vendredi')" or "new Tempo('15 fevrier 2026')") or by explicitly noting
that connector words must be in English unless custom affix mapping is supplied;
reference the Tempo constructor and the parse: { localize: true } option in the
update so readers see where the limitation applies.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 3845f740-70f0-4500-b9df-3d884ea71e0c

📥 Commits

Reviewing files that changed from the base of the PR and between 2328f34 and 3460b79.

📒 Files selected for processing (12)
  • packages/tempo/CHANGELOG.md
  • packages/tempo/doc/releases/v3.x.md
  • packages/tempo/doc/tempo.config.md
  • packages/tempo/doc/tempo.cookbook.md
  • packages/tempo/doc/tempo.parse.md
  • packages/tempo/src/engine/engine.alias.ts
  • packages/tempo/src/module/module.parse.ts
  • packages/tempo/src/support/support.index.ts
  • packages/tempo/src/support/support.init.ts
  • packages/tempo/test/core/alias-engine.test.ts
  • packages/tempo/test/discrete/parse.locale.test.ts
  • packages/tempo/test/discrete/standalone_parse.test.ts
💤 Files with no reviewable changes (1)
  • packages/tempo/test/discrete/standalone_parse.test.ts
✅ Files skipped from review due to trivial changes (3)
  • packages/tempo/src/support/support.index.ts
  • packages/tempo/CHANGELOG.md
  • packages/tempo/doc/releases/v3.x.md
🚧 Files skipped from review as they are similar to previous changes (4)
  • packages/tempo/test/discrete/parse.locale.test.ts
  • packages/tempo/src/support/support.init.ts
  • packages/tempo/doc/tempo.config.md
  • packages/tempo/src/module/module.parse.ts

Comment thread packages/tempo/doc/tempo.cookbook.md
Comment thread packages/tempo/doc/tempo.parse.md
@magmacomputing magmacomputing merged commit 3793f8b into main Jun 13, 2026
2 checks passed
@magmacomputing magmacomputing deleted the feature/docs-tidy branch June 13, 2026 09:49
This was referenced Jun 14, 2026
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