-
Notifications
You must be signed in to change notification settings - Fork 1
feat: establish versioned UI translation ledger foundation #929
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
seonghobae
wants to merge
207
commits into
main
Choose a base branch
from
feat/i18n-versioned-translation-ledger
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
207 commits
Select commit
Hold shift + click to select a range
092d321
test: define versioned UI translation ledger contract
seonghobae b4c8310
feat: add fail-closed translation ledger read model
seonghobae 43c7502
feat: persist immutable eight-locale translation resources
seonghobae 370f83a
test: require publication serialization for translation children
seonghobae bb61753
fix: serialize translation publication with child writes
seonghobae d4380c2
docs: propose versioned UI translation ledger
seonghobae ba7af63
test: cover translation ledger read-model edge cases
seonghobae 3b68e4e
test(i18n): reject incomplete exact-cache projections
seonghobae 249b6cf
fix(i18n): verify cached projections against authoritative keysets
seonghobae f666a5b
test(i18n): preserve authoritative keyset admission on cache hits
seonghobae 7df3478
docs(adr): make cache completeness authority explicit
seonghobae d75d0a9
test(i18n): require canonical resource identity in PostgreSQL
seonghobae d4d03da
fix(i18n): enforce canonical translation resource identity
seonghobae 0e30753
docs(adr): align DB and cache resource identities
seonghobae c60693d
test(i18n): require database-owned publication timestamp
seonghobae 5973bbb
fix(i18n): make publication timestamp database-owned
seonghobae 4d06580
docs(adr): make publication provenance database-owned
seonghobae d982d26
test(i18n): exercise translation ledger invariants in PostgreSQL
seonghobae 74f0521
test(i18n): timestamp the publication transition itself
seonghobae e2429b1
fix(i18n): timestamp the publication transition statement
seonghobae 3a3f809
test(i18n): align publication receipt with statement time
seonghobae 0089692
docs(adr): bind publication evidence to the transition statement
seonghobae 527abd6
test(i18n): reject padded translation identities
seonghobae 66ff153
fix(i18n): reject padded translation identities
seonghobae 4df91d9
docs(adr): align translation identity admission evidence
seonghobae a0a7cf4
test(i18n): forbid new psycopg2 verification reachability
seonghobae 2ec9873
test(i18n): use asyncpg for ledger PostgreSQL verification
seonghobae 8b01c7c
fix(i18n): rollback failed asyncpg publication transaction
seonghobae e325392
test(i18n): prove cache reads release DB lease
seonghobae 0241549
fix(i18n): release DB lease before cache I/O
seonghobae f077d19
test(i18n): align miss-path lease expectations
seonghobae b4056e2
docs(i18n): record cache lease boundary
seonghobae aa050f1
test(i18n): RED immutable translation aggregate identity
seonghobae 04c851f
fix(i18n): freeze translation aggregate identity after insert
seonghobae 9b2720c
docs(adr): record immutable translation aggregate identity
seonghobae c46634a
test(i18n): keep aggregate identity guard in hosted contract
seonghobae e2b5b5f
test(i18n): reject padded translation key identity
seonghobae 413ea3b
fix(i18n): canonicalize required translation key identity
seonghobae 913e3d1
test(i18n): preserve canonical required-key guard in hosted CI
seonghobae baa1986
docs(adr): make translation key identity canonical
seonghobae da3b9c5
test(i18n): reject non-space edge whitespace identity
seonghobae f74b7e2
fix(i18n): reject edge whitespace beyond plain spaces
seonghobae d8c3864
test(i18n): preserve edge-whitespace identity guard
seonghobae 1da44d3
docs(adr): align PostgreSQL edge-whitespace semantics
seonghobae 47c2c21
test(i18n): reject database whitespace-only copy
seonghobae 55df3d8
test(i18n): prove whitespace-only copy publication fails
seonghobae 9b42748
fix(i18n): reject whitespace-only translation copy
seonghobae b03c91d
docs(adr): align immutable copy completeness
seonghobae 9f04f09
test(i18n): require immutable translation projections
seonghobae 035fbc8
fix(i18n): freeze published translation projections
seonghobae a56458f
docs(adr): bind translation value-object immutability
seonghobae ea95121
test(i18n): reject poisoned exact-version cache copy
seonghobae 3495598
fix(i18n): bind cache copy to PostgreSQL digests
seonghobae 1e9d6f9
test(i18n): model PostgreSQL cache integrity digests
seonghobae dc5e374
test(i18n): verify PostgreSQL copy digests
seonghobae 22251bc
docs(adr): bind Valkey copy to PostgreSQL evidence
seonghobae c34f94b
test(i18n): preserve cache digest admission contract
seonghobae 888a6f1
test(i18n): expose locale-dependent Unicode whitespace admission
seonghobae 2b921e0
fix(i18n): make whitespace admission collation independent
seonghobae f0ad89d
fix(i18n): pin application whitespace repertoire
seonghobae e33ad22
test(i18n): align hosted whitespace contract
seonghobae caec5b7
docs(adr): pin collation-independent whitespace contract
seonghobae 5e71da3
test(i18n): bind explicit whitespace repertoire
seonghobae 8588bcc
test(i18n): reject resource versions outside bigint
seonghobae 11326a2
fix(i18n): align resource version with bigint identity
seonghobae 7222994
test(i18n): reject non-UTF-8 cache copy
seonghobae ac175dc
fix(i18n): fail cache surrogate copy closed
seonghobae ab5270f
test(i18n): reject non-string translation identities
seonghobae 42e0af0
fix(i18n): fail closed on malformed identity types
seonghobae dbe484b
test(i18n): reject float cache version identity
seonghobae a46bf61
fix(i18n): enforce integer cache version identity
seonghobae 1edab5c
test(i18n): reject non-PostgreSQL text identities
seonghobae 6679d12
fix(i18n): align identity strings with PostgreSQL text
seonghobae 0206d6a
test: require translation ledger rollback recovery
seonghobae 7d47074
fix: add translation ledger rollback recovery
seonghobae 14dd852
test: forbid destructive translation ledger rollback
seonghobae 4de0353
fix: guard translation rollback against data loss
seonghobae 2ad7877
test(i18n): expose rollback insert race
seonghobae 7b60ad4
fix(i18n): serialize rollback emptiness guard
seonghobae be42d9b
test(i18n): pin rollback lock ordering
seonghobae 4f3b809
test(i18n): pin TranslationScreen alias immutability RED
seonghobae 83e4c65
fix(i18n): make TranslationScreen own immutable copy
seonghobae 0ce3422
test(i18n): reject mismatched translation cache identity
seonghobae 718f86d
fix(i18n): bind translation value object to cache identity
seonghobae 80e9eba
test: require replay-safe translation rollback
seonghobae 99521ba
test: preserve rollback replay tolerance
seonghobae f6f3758
fix: make translation rollback replay-safe
seonghobae 0d3d858
test(i18n): reject invalid TranslationScreen projections
seonghobae 223aca5
fix(i18n): enforce TranslationScreen projection invariants
seonghobae 2e83785
fix(test): restore TranslationScreen regression syntax
seonghobae 906f7e1
docs(gaps): refresh translation delivery evidence
ceed87e
feat(i18n): expose authenticated screen translations
249b59e
docs(gaps): record authenticated translation slice
cbc18ce
test(i18n): reject ambiguous duplicate cache members
seonghobae f516869
fix(i18n): reject duplicate cache JSON members
seonghobae 503da98
test(i18n): keep translation API fixture off psycopg2
seonghobae f0924b7
test(i18n): verify API read through asyncpg boundary
seonghobae 04ef4fc
fix(i18n): keep API integration on asyncpg
seonghobae 494c005
test(i18n): pin rollback locale-preference admission
seonghobae e23c21d
fix(i18n): guard rollback locale preferences
seonghobae 1b252eb
test(i18n): assert rollback locale lock ordering
seonghobae 686e481
test(i18n): reject recursive cache payloads
seonghobae 6e3129e
test(i18n): force decoder recursion RED
seonghobae c44cf49
fix(i18n): treat recursive cache JSON as miss
seonghobae bf37d39
test(i18n): prove recursive cache fixture
seonghobae b0d764b
test(i18n): pin published truncate immutability RED
seonghobae d9cc274
fix(i18n): guard published ledger from truncate
seonghobae bf04fbf
chore(i18n): add replay-safe truncate guard rollback
seonghobae 77554c1
test(i18n): verify truncate guard migration behavior
seonghobae b481967
test(i18n): cover truncate guard admission and rollback
seonghobae d08e27f
fix(i18n): converge 0246 rollback after truncate guard
seonghobae aca158d
test(i18n): pin rollback convergence for truncate guard
seonghobae af049ae
test(i18n): require non-vacuous translation HTTP contract
seonghobae 70d3436
test(i18n): exercise authenticated translation HTTP route
seonghobae 9e4df93
test(i18n): align immutable cache fixture evidence
c53d055
test(i18n): pin gap baseline to live API slice
seonghobae fe8693b
docs(i18n): restore code-current gap baseline
seonghobae 063a6d9
test(i18n): bound optional cache I/O
seonghobae 12b8f75
fix(i18n): bound optional cache latency
seonghobae 5e8f433
docs(i18n): record bounded cache failure path
seonghobae 9604251
test(i18n): serialize publish with child truncate
seonghobae 6db4b2a
fix(i18n): serialize publish with truncate guard
seonghobae 85a9a93
test(i18n): pin truncate publication lock order
seonghobae 3e10376
docs(i18n): record truncate publication serialization
seonghobae 22788ad
test(i18n): reject truncate lock-order deadlock
seonghobae e618b51
test(i18n): pin nonblocking truncate admission
seonghobae f97145d
fix(i18n): fail truncate lock contention closed
seonghobae 68baf19
docs(i18n): record nonblocking truncate admission
seonghobae bad21a9
test(i18n): align cache timeout helper call
f1877b8
docs(gaps): refresh exact-head delivery evidence
92850af
test(docs): pin draft and history formatting contracts
seonghobae d8d3e55
docs(product): restore draft evidence boundary
seonghobae 834776c
docs(product): restore traceability after status repair
seonghobae 7a8a648
docs(history): preserve raw archive behind lint-clean index
seonghobae e7509b4
test(docs): prove historical archive byte identity
seonghobae df3266f
fix(i18n): make translation rollback replay-safe
b941635
docs(gaps): refresh translation exact-head evidence
597528f
test(i18n): distinguish translation request validation failures
seonghobae f3524ad
refactor(i18n): type translation request validation failures
seonghobae 84b7b5e
codex: address PR review feedback (#929)
4139858
fix(observability): replace deprecated log handler
fc53004
test(i18n): pin one-query exact-version cache miss RED
seonghobae a741c2f
docs(gaps): refresh exact-head verification evidence
a3c8e9d
perf(i18n): reuse exact-version PostgreSQL projection
seonghobae 4ec808a
test(i18n): align immutable miss query budget
seonghobae 655fee2
test(i18n): restore real recursion cache evidence
seonghobae 3acd976
docs(gaps): align exact-version query-budget evidence
seonghobae ab2652b
test(i18n): align one-query cache fallbacks
c1e7bdf
test(i18n): preserve real recursion evidence
seonghobae e6041cf
docs(gaps): preserve executable recursion evidence
seonghobae ffa45c5
test(i18n): make recursion fallback version-independent
989e1f4
docs(gaps): align recursion portability evidence
265aa32
test(i18n): preserve real recursion wire evidence
seonghobae 12284da
docs(gaps): converge dual recursion evidence
seonghobae e7ec66a
test(i18n): make wire recursion evidence portable
d6d9df6
test(i18n): RED pin real wire recursion evidence
seonghobae 3ca4d77
fix(i18n): restore real decoder recursion proof
seonghobae 65a7df7
docs(gaps): restore exact-head wire evidence boundary
seonghobae a6aecea
chore(main): non-force converge protected #930
seonghobae 69a1bc4
chore(main): non-force converge protected #931
seonghobae 2d730ae
test(i18n): make deep JSON cache evidence runtime-portable
7edbd4f
test(i18n): require actual deep JSON decoder exhaustion
seonghobae 5df3120
fix(i18n): restore real decoder-exhaustion evidence
seonghobae ad83c4a
docs(gaps): restore strict translation wire evidence
seonghobae adf312b
test(i18n): preserve cache hit and miss query budgets
seonghobae 15c344e
fix(i18n): preserve exact-version cache value
seonghobae 49cc023
test(i18n): align corrupt-cache fallback budget
seonghobae e200e41
docs(adr): preserve cache-hit and miss economics
seonghobae 49a0ee7
docs(gap): align translation cache query economics
seonghobae 1de835d
test(i18n): align exact-head regression assertions
3e11cee
test(i18n): restore exact-head cache regressions
fbce5b1
docs(gap): refresh translation delivery boundary
e32098a
docs(gap): record adjacent exact-head evidence
26ced49
docs(gap): refresh PostgreSQL candidate head
722c6ed
docs(gap): reconcile TLS ADR collision
1d7d9a9
docs(gap): refresh TLS delivery state
42e1e2e
docs(gap): keep Customer Master acceptance state current
seonghobae cee066a
docs(gap): record current coordination queue
4c645a1
test(i18n): tighten current evidence alignment
seonghobae f70c7a7
docs(gap): adopt live postgres candidate head
seonghobae 9a189fb
test(i18n): parse scoped baseline blockquote
953a569
test(i18n): tighten candidate evidence semantics
seonghobae 3849803
docs(i18n): align current candidate evidence state
seonghobae 481a53f
test(i18n): admit repaired candidate review state
seonghobae 6042c37
docs(i18n): align ready validation boundary
seonghobae f07a755
docs(gaps): refresh live queue snapshot
seonghobae 2a8ed5d
test(i18n): address review quality findings
0f4fd26
docs(gaps): refresh 2026-09-07 live queue snapshot
697531b
docs(gaps): refresh 2026-09-08 live queue snapshot
03f68c1
docs(gaps): record #983 coverage-scope repair evidence
f57eb32
docs(gaps): restore pending-check boundary
1551f9e
docs(gaps): record #983 CSF inventory execution evidence
b05dec6
docs(gaps): record #983 draft coverage progress
603a7e1
docs(gaps): record ontology export coverage on #983
fabdacd
docs: repair current translation validation snapshot
seonghobae 1f0f705
docs(gaps): record 2026-09-09 exact-head fabdacd4 RCA and autonomous KPI
07388ae
docs(gaps): record 2026-09-09 seventh-cycle head 1f0f7059c RCA
aaad36a
docs(gaps): remove self-staling scheduler telemetry
seonghobae 6c207f1
docs(gaps): preserve executable live-snapshot contract
seonghobae 3c03ac3
docs(gaps): satisfy scoped adjacent-candidate contract
seonghobae e1da2c2
docs(gaps): derive PRD/TRD/UML/Gap/actions for #922 without volatile …
f389563
fix(i18n): keep admitted screens reachable and rollback safe
0889f49
test(i18n): align exact route and wire evidence contracts
3d17efb
fix(i18n): preserve canonical identities and replay safety
0db7d31
fix(i18n): bound cache decoding by authoritative copy
e48d529
fix(i18n): converge missing octet evidence to cache miss
d997a28
docs(gaps): record 2026-09-09 exact-head e48d52968 RCA
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.