Skip to content

fix(docs): restore Norwegian Bokmål diacritical marks across nb/ locale - #384

Merged
rhuanbarreto merged 3 commits into
mainfrom
claude/hungry-mclaren-839ebc
May 30, 2026
Merged

fix(docs): restore Norwegian Bokmål diacritical marks across nb/ locale#384
rhuanbarreto merged 3 commits into
mainfrom
claude/hungry-mclaren-839ebc

Conversation

@rhuanbarreto

Copy link
Copy Markdown
Contributor

Summary

  • Restored missing Norwegian Bokmål diacritical marks (å, ø, æ) across all 35 translation files under docs/src/content/docs/nb/
  • Fixed ~500+ individual occurrences of three distinct corruption patterns:
    • Stripped diacriticals — characters removed entirely (e.g. monstermønster, aå)
    • ASCII approximations — double-letter substitutions (e.g. aaå, oeø)
    • HTML entitieså/ø/æ converted to literal UTF-8 characters
  • Added translation quality checklist to agent memory for future sessions

Motivation

GEN-002 mandates correct Norwegian characters (æ, ø, å) in nb/ translations. Pre-existing content had systematically broken diacriticals across reference pages, guides, examples, and case studies.

Test plan

  • bun run lint — pass
  • bun run typecheck — pass
  • bun run format:check — pass (oxfmt applied to all MDX files)
  • bun run test — 1218 pass, 19 skip
  • bun run cli check — 39/39 rules pass
  • bun run cli check --adr GEN-002 — 3/3 rules pass (page parity, locale links, translation drift)
  • bun run build:check — pass
  • Grep scan confirms zero remaining stripped diacriticals or HTML entities in nb/ files

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented May 29, 2026

Copy link
Copy Markdown

Deploying archgate-cli with  Cloudflare Pages  Cloudflare Pages

Latest commit: ef8c302
Status: ✅  Deploy successful!
Preview URL: https://41cfd0e5.archgate-cli.pages.dev
Branch Preview URL: https://claude-hungry-mclaren-839ebc.archgate-cli.pages.dev

View logs

@github-actions

github-actions Bot commented May 29, 2026

Copy link
Copy Markdown
Contributor

Code Coverage

Metric Value
Lines 90.3% (6735 / 7458)
Threshold 90% minimum — met
Platforms Linux + Windows

Full HTML report available in workflow artifacts.

Per-directory breakdown
Directory Coverage Lines
src/commands/ 88.0% 2082 / 2365
src/engine/ 93.1% 1379 / 1481
src/formats/ 100.0% 141 / 141
src/helpers/ 90.3% 3133 / 3471

Norwegian translations under docs/src/content/docs/nb/ had systematically
missing diacritical marks (å, ø, æ) in three patterns: stripped entirely
(e.g. "monster" for "mønster"), ASCII approximations (e.g. "aa" for "å"),
and HTML entities (e.g. "å" for "å"). This violates GEN-002 which
mandates correct Norwegian characters. Fixed all ~500+ occurrences across
35 files covering reference pages, guides, examples, and case studies.

Signed-off-by: Rhuan Barreto <rhuan@barreto.work>
@rhuanbarreto
rhuanbarreto force-pushed the claude/hungry-mclaren-839ebc branch from c320253 to e8e1356 Compare May 29, 2026 21:33
Restore 4 missing Norwegian diacritical marks missed in the initial pass:
- Kjor → Kjør, systemmiljo → systemmiljø (cli/index.mdx)
- Foreslatt → Foreslått (×2, rule-api.mdx)

Signed-off-by: Rhuan Barreto <rhuan@barreto.work>
@rhuanbarreto
rhuanbarreto merged commit ef98b39 into main May 30, 2026
18 checks passed
@rhuanbarreto
rhuanbarreto deleted the claude/hungry-mclaren-839ebc branch May 30, 2026 20:02
@archgatebot archgatebot Bot mentioned this pull request May 30, 2026
rhuanbarreto pushed a commit that referenced this pull request May 30, 2026
# archgate

## [0.42.0](v0.41.1...v0.42.0)
(2026-05-30)

### Features

* **engine:** add inline suppression via archgate-ignore comments
([#383](#383))
([1240860](1240860))

### Bug Fixes

* **deps:** resolve dependency dashboard deprecation and lookup warnings
([#387](#387))
([18eae44](18eae44)),
closes [#107](#107)
* **docs:** restore Norwegian Bokmål diacritical marks across nb/ locale
([#384](#384))
([ef98b39](ef98b39))
* **shims,docs:** resolve CodeQL and AI code quality findings
([#388](#388))
([63ec93f](63ec93f))

---
This PR was generated with
[simple-release](https://github.com/TrigenSoftware/simple-release).

<details>
<summary>📄 Cheatsheet</summary>
<br>



You can configure the bot's behavior through a pull request comment
using the `!simple-release/set-options` command.

### Command Format

````md
!simple-release/set-options

```json
{
  "bump": {},
  "publish": {}
}
```
````

### Useful Parameters

#### Bump

| Parameter | Type | Description |
|-----------|------|-------------|
| `version` | `string` | Force set specific version |
| `as` | `'major' \| 'minor' \| 'patch' \| 'prerelease'` | Release type
|
| `prerelease` | `string` | Pre-release identifier (e.g., "alpha",
"beta") |
| `firstRelease` | `boolean` | Whether this is the first release |
| `skip` | `boolean` | Skip version bump |
| `byProject` | `Record<string, object>` | Per-project bump options for
monorepos |

#### Publish

| Parameter | Type | Description |
|-----------|------|-------------|
| `skip` | `boolean` | Skip publishing |
| `access` | `'public' \| 'restricted'` | Package access level |
| `tag` | `string` | Tag for npm publication |

### Usage Examples

#### Force specific version

````md
!simple-release/set-options

```json
{
  "bump": {
    "version": "2.0.0"
  }
}
```
````

#### Force major bump

````md
!simple-release/set-options

```json
{
  "bump": {
    "as": "major"
  }
}
```
````

#### Create alpha pre-release

````md
!simple-release/set-options

```json
{
  "bump": {
    "prerelease": "alpha"
  }
}
```
````

#### Publish with specific access and tag

````md
!simple-release/set-options

```json
{
  "bump": {
    "prerelease": "beta"
  },
  "publish": {
    "access": "public",
    "tag": "beta"
  }
}
```
````

### Access Restrictions

The command can only be used by users with permissions:
- repository owner
- organization member
- collaborator

### Notes

- The last comment with `!simple-release/set-options` command takes
priority
- JSON must be valid, otherwise the command will be ignored
- Parameters apply only to the current release execution
- The command can be updated by editing the comment or adding a new one


</details>

<!--
  Please do not edit this comment.
  simple-release-pull-request: true
  simple-release-branch-from: release
  simple-release-branch-to: main
-->

Signed-off-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
@archgatebot archgatebot Bot mentioned this pull request May 30, 2026
rhuanbarreto added a commit that referenced this pull request Jul 26, 2026
…ity (#523)

Closes #516.

## The gap was live, not hypothetical

GEN-002 has always required correct diacritics — *"DO use correct
diacritical marks in Portuguese — `não` not `nao`, `código` not
`codigo`"* — but nothing enforced it. The companion rules checked only
**structure**: page parity, translation drift, link prefixes. So six
`pt-br` pages sat in `main` with their diacritics stripped, plus a
seventh with a corrupted frontmatter `description`.

`nb` hit the identical failure in #384: ~500 occurrences across 35
files, fixed in two manual passes, where the second pass caught four
cases the first missed. Manual review is not a reliable detector for
this.

## Content

Diacritics restored across seven `pt-br/examples` pages — prose,
headings, and frontmatter descriptions. Verified mechanically: **0
stripped forms remain**, and **fenced code blocks are byte-identical to
`main` in all seven files**, so no identifier, command, or path was
touched.

## Rules

Two additions to `GEN-002-docs-i18n.rules.ts`, both `error`:

- **`i18n-encoding-corruption`** — accented characters written as HTML
entities (`&aring;`, `&#231;`) or as double-encoded UTF-8. Detection
requires a `0xC2`/`0xC3` lead byte **followed by** a `0x80`–`0xBF`
continuation byte. A bare lead-byte scan would flag legitimate uppercase
Portuguese, where `Ã` precedes an ASCII letter — `ÃO` already occurs
twice in this tree.
- **`i18n-diacritic-density`** — accented characters per 1000 prose
letters per locale, ignoring fenced and inline code.

Thresholds come from measuring the corpus, not from taste:

| | healthy minimum | stripped pages | threshold |
|---|---|---|---|
| `nb` | 5.9 / 1000 | — | 2 |
| `pt-br` | 15.2 / 1000 | 0.0–1.1 | 5 |

**A whole-file "has at least one diacritic" check was tried and
rejected.** Measured against the six corrupt files it caught **one**:
`wrapper-enforcement.mdx` was fully stripped in prose but contained
`Não` inside a code sample, which defeats it. Density caught five of
six, with a 14× gap between the bands.

Accented characters in the rules file are numeric code-point sets, never
literals, so the check cannot be broken by the corruption it detects.

## Documented limits

`i18n-diacritic-density` is a bulk-stripping detector, not a spell
checker. It does **not** catch isolated stripped words in
otherwise-correct prose — `max-file-length.mdx` scored a healthy 26.6
while its frontmatter was stripped, and only a word-level scan found it
— and it skips pages under 200 prose letters. Both limits are written
into GEN-002's Compliance section as review responsibilities rather than
left implicit.

## Verification

`bun run validate` green: 1675 tests, 49/49 rules, build clean.
Fire-tested both directions:

| Case | Result |
|---|---|
| Stripped page restored from `main` | density rule fires, names the
file |
| `&aring;` injected | caught, correct line |
| Double-encoded `ø` injected | caught, correct line |
| `VALIDAÇÃO COMPLETA` in `pt-br` | not flagged |

## Review request

**Please read the Portuguese as a native speaker.** The automated checks
count accents; they cannot tell a correct accent from a confidently
wrong one. `à` versus `a` (crasis) and `é` versus `e` are the places to
look — I added several of each. An orthography review agent returned
PASS here, but its per-word annotations were fabricated, so its verdict
carries no weight.

---------

Signed-off-by: Rhuan Barreto <rhuan@barreto.work>
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