Skip to content

feat: retain multilingual offline place articles - #1839

Merged
timohueser merged 12 commits into
developfrom
codex/multilingual-place-content
Sep 16, 2026
Merged

timohueser merged 12 commits into
developfrom
codex/multilingual-place-content

Conversation

@timohueser

@timohueser timohueser commented Sep 16, 2026

Copy link
Copy Markdown
Owner

Landmark maps previously retained one article language. They now retain every usable article in the supported UI languages: English, German, French and Spanish. The device selects its UI language, then English, then a baked local default. Changing UI language selects the installed text and its Sources without a new map download. All versions share one optional photo.

Closes #1832. Shared prerequisite for peak articles in #1830; peak capture, map associations and Peak View access remain separate issues #1834, #1835 and #1836.

Implementation

  • Capture pins administrative and country official-language claims. The compiler selects the nearest usable administrative language, then country language, then fixed UI order. Missing metadata retains the article.
  • A bounded article directory stores each language’s text and attribution with bundle-relative offsets. Assembly preserves the whole bundle and deduplicates shared content.
  • Landmark section version 1 has 84-byte records; outer maps remain OBCM v16. Existing sections require a fresh bake. No compatibility decoder was added.
  • Device selection reads at most four directory entries. The ARM application allocation increases by 24 bytes; the other 34 allocation rows and existing resource limits are unchanged.
  • A test-only dependency connects the web assembler to the shared article fixture builder.

Public documentation is updated in separate docs: commits. The binary specification, compiler README and capture commands describe the format and language policy.

Development fixtures

Rebuilt, uploaded and publicly verified all replacement archives: compiled Swiss content, Grimsel, Meiringen, West Cork and current Peak View metadata. The catalog pins their exact byte counts and SHA-256 digests. Maps use the normal pack or bake/cut/assemble path. The Grimsel fixture recipe now accepts its compiled landmark input.

Swiss content has 1,478 sites, 2,391 article versions and 1,109 shared photos. The retained source snapshot predates Spanish and locale acquisition; provenance explicitly records that limitation. It contains English, German and French versions and exercises the missing-metadata fallback. Current capture supports Spanish and local metadata. No sources were fabricated and no raw country capture was published.

Peak View’s published metadata differed from its tracked locations.json on the base branch. That package now contains the tracked metadata with unchanged terrain. Existing source boundaries, registered routes/tracks and terrain are preserved. Grimsel’s archive drops a redundant, unregistered demo GPX; its tracked source remains unchanged, and all identified consumers use that tracked source directly.

The fixture cleanup record reports removal of 22 unreferenced development archives (459,444,225 bytes). Active branch and CI references are retained until superseded safely.

Validation

Passed locally:

  • ./tools/obc test -p obc-formats -p obc-reader -p obc-pack -p obcm-assemble -p obc-bake -p obc-app -p obc-vectors -p obc-host-core; repeated these affected packages after the upstream test-target integration.
  • cargo clippy for those eight packages with --all-targets -- -D warnings.
  • ./tools/obc test -p obc-pack -p obcm-testkit and scoped Clippy after the final locale bound adjustment.
  • ./tools/obc test -p obc-web-assemble (20 unit and 30 determinism tests) and scoped Clippy for the CI dependency fix.
  • python3 -m unittest tools.tests.test_landmark_capture (11 tests), then the complete tools/tests suite (206 tests) in an isolated environment with repository requirements.
  • python3 fixtures/verify-landmark-content.py: captured four-site compilation is byte-identical across two runs; three valid photos retained, missing-creator photo rejected.
  • Two network-denied release country compiles: all 1,110 output files identical. All three Swiss archives pass isolated archive/member/tracked-source verification.
  • ./tools/obc test fixtures -p obc-route --test nav_fixtures and ./tools/obc test fixtures -p obc-sim --test present_fixtures: four tests each on refreshed Grimsel.
  • One local UI sweep: all 263 frames match. It used rebuilt West Cork and current Peak View metadata in an isolated catalog; those exact packages are now published. Additional same-map renders verify German text and Spanish-to-English fallback. The local sweep preceded the later upstream shared-frame merge; final CI checks the integrated head.
  • One ARM head build, cargo build --release --locked --features resource-report, followed by resource_guard.py report and board against the recorded baseline. No base rebuild. resource_guard.py strict-align passes.
  • Workspace and all standalone-root formatting; ./tools/obc suites check; bash -n fixtures/build-map-package.sh; python3 docs/build_docs.py --check-links; git diff --check.

The affected-suite dry run selected 54 suites. The full platform matrix was left to required CI; no local full-CI mirror, second UI sweep, repeated resource build, wake profiling, flashing or physical acceptance run was performed.

Independent review

A separate sub-agent passed adversarial review of the initial code with no actionable findings. A different implementation sub-agent supplied the CI dependency fix, and another rebuilt the Swiss fixtures. Scoped adversarial review of the final integration and fixture delta passed. It found one stale Cork documentation paragraph; the fixture agent corrected it in ddd786da5, and the reviewer verified the correction. No findings remain open. Required final-head CI is the remaining merge gate.

@coderabbitai

coderabbitai Bot commented Sep 16, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: 830d9c72-1853-48e4-986f-1dea9479b393


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.

@timohueser
timohueser marked this pull request as ready for review September 16, 2026 09:25
@timohueser
timohueser merged commit 9ddf1b2 into develop Sep 16, 2026
32 checks passed
@timohueser
timohueser deleted the codex/multilingual-place-content branch September 16, 2026 10:02
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.

L6 — Shared multilingual place articles and device language selection

1 participant