Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion .dev/STATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,13 @@ Roadmap detail lives in the work-plan tracker **#257**, not here (PLAN.md predat

## In flight

- **v0.27.0 release cut 2026-09-01** — headline: the second inline native-review round
encoded (ml glossary v0.4.0 + rules 18 → 24 + the first deterministic ml lints, #297;
regeneration-checked in the same PR, decision record
`D-2026-09-01-ml-exercise-statements-stay-english`), plus prompt caching on every
Comment on lines +12 to +13
translator call (#293), `tool-review-injection/` (#285), the `runReview` extraction
(#278, #169 slice 1) and the harness editors block (#275). W1 (#259) did not make it
and now targets v0.28.0. §4a gate status is recorded on the release PR.
- **v0.26.0 release cut 2026-08-17** — headline: the first inline native-review round
encoded (ml glossary v0.3.0 + 18-rule set, #272; regeneration-verified, #273), plus
verdict provenance (#247), config-preserving writers (#243), newline-terminated
Expand Down Expand Up @@ -39,7 +46,7 @@ Roadmap detail lives in the work-plan tracker **#257**, not here (PLAN.md predat
and the test source repo carries only the zh-cn sync workflow until the next
unscoped harness run.
- **W1 (#259) is the next P0** — declared-vs-delivered assertion + TOC structured merge,
now targeting **v0.27.0** (v0.26.0 shipped 2026-08-17 as the ml round-1 release).
now targeting **v0.28.0** (v0.27.0 cut 2026-09-01 as the ml round-2 + prompt-caching release, without W1; v0.26.0 shipped 2026-08-17 as the ml round-1 release).
Fully unblocked; the one gate is #169 first or alongside. Scope grew 2026-08-19:
a stale-resync detection box (#276 guard — code cells modulo localized
comments/docstrings) and the both-directions rule on the assertion (`files[]`
Expand Down
10 changes: 9 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,18 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]
## [0.27.0] - 2026-09-01

### Added
- **Malayalam: the second inline native-review round is encoded — ml glossary v0.4.0 (+16 terms), the rule set grown 18 → 24, and the first deterministic ml lints** (#296, #189 Phase 2 round 2): the editor of record reviewed `functions` on lecture-python-programming.ml#7 — 118 committable suggestion blocks on 118 of 123 Malayalam prose lines, all applied and every one dispositioned in QuantEcon/project-translation `reports/2026-09-01-ml-functions-review-disposition.md`. The headline is that the round-1 rules held (no recurrence of below-deixis, ordinal, light-verb, `-യുടെ` or suffixed-English flags), so this change encodes the *new* classes the round surfaced, most of them deterministic: terminal punctuation (a colon on every paragraph that introduces a code cell, list or equation, a full stop on every other — 26 flags, regardless of the English source's punctuation); sentence-initial capitalisation of a retained-English word (`Functions-നെ`, `Built-in`, `Return statement` — 14); the hortative teacher's voice (`നമുക്ക് … -ആം`, never the plain future `നമ്മൾ … -ും` — 12); consistent accusative `-നെ` on light-verb objects with no additive `-ഉം` on list items (15); the fixed renderings he corrected on every occurrence ("a given" → `തന്നിരിക്കുന്ന`, "consider" → `നോക്കാം`, spelling `കുറച്ചുകൂടി` — 10); the sandwich-sentence rule (state a claim interrupted by code cells once, before the first cell); three more sentence-initial connectives kept English ("In particular", "Obviously", "Basically"); worked examples for the pointer sentences the model missed three times; and the maintainer's 2026-09-01 ruling that exercise statements with probabilistic or mathematical content stay English, hybrid sentences included (decision record `.dev/decisions/D-2026-09-01-ml-exercise-statements-stay-english.md`). Glossary: the ordinary words the editor kept moving back to English (`useful` ×4 — never ഉപയോഗപ്രദമായ — `provide`, `exist`, `automatically`, `create`, `improve`, `full`, `stage`, `answer`, `successive`), the `line`/`lines` pin the #273 regeneration flagged as a 14× variance regression, and four everyday words he moved the other way (`straightforward` → എളുപ്പം, `contrived` → കൃത്രിമം, `limited` → പരിമിതി, `facilitate` → സഹായിക്കുക). `experiments/ml-benchmark/scripts/ml_metrics.py` gains the round's lints as a LINT bucket (never FAIL): terminal punctuation, lowercase-Latin-initial sentences, a banned-renderings list drawn from the rules, and a future-hortative watch — string checks that sidestep #240 and #229, calibrated so the editor's reviewed text is clean (seed 24/19/16/6 → reviewed 1/1/2/1, the residuals being forms he himself kept) and the pre-review seed lights up. Held for the editor's answers on lecture-python-programming.ml#12: "For example" as a discourse rule and glossary pins for `already`, `name`, `example(s)`, `work`. ml-scoped only; no other language's rules move.
- **Prompt caching on every translator API call** (#292, #293): each translator prompt is split into a stable block (static rules + language `additionalRules` + rendered glossary — byte-identical across a run) carrying `cache_control: {type: 'ephemeral'}`, and a volatile block (`customInstructions` + document content). Repeat calls in a run read the 10–12K-token prefix at the cached rate. All five builders are covered (section update, section resync, new section, full document, document resync); `customInstructions` moves to the head of the volatile block so the cacheable prefix is not broken. Semantics: per-result `tokensUsed` and the `input-tokens` output now exclude cached tokens — total prompt size is `input + cache-creation + cache-read`, as `action.yml` states. CLI triage/eval prompts are deliberately not cached (their rubric is under the 1024-token minimum) and the reviewer breakpoint is deferred.
- **`tool-review-injection/` — certify the reviewer by injected-defect catch rate** (#285, QuantEcon/project-translation#28): the review-mode half of the per-mode eval harness. Field observation cannot bound the auto-merge gate's precision (~1.2 eligible PRs/week means a ≤1% bound takes ~4.6 years), so this manufactures the positive class — defects injected into clean translations, reviewed, scored against the gate re-implemented in `lib.mjs`. First run (140 reviews of 45 zh-cn fixtures): M0-core catch rate 72%, 24 of 36 non-catches detected but filed below the gate, both negative controls false-flagged, routing flipped on 3 of 5 identical clean re-reviews. Analysis in QuantEcon/project-translation `reports/2026-08-20-m0-reviewer-certification.md`.

### Changed
- **`runReview` extracted from `src/index.ts` into `src/action/review.ts` and tested** (#278, #169 slice 1 — the W1 gate): the first slice of splitting the 1,579-line Action entry point that no test could import. Semantics-preserving by construction — the set of `core.setOutput` calls in the bundle is identical before and after, `action.yml`'s entry contract is untouched, and `import.meta.url` resolves through the same esbuild banner (so `../glossary` still resolves to the repo-root `glossary/`). The architecture module map gains the new modules.

### Fixed
- **E2E harness targets carry a `.translate/config.yml` again, with the production `editors:` block** (#275, QuantEcon/project-translation#24): the #202 reset deleted `.translate/` on every target reset and nothing re-created it, so the harness had been running with no translate config at all. The reset now lays the config down per target (block-style YAML, `primary:` first — the only form the parser reads and the shape `writeConfig`'s unknown-key merge preserves).

## [0.26.0] - 2026-08-17

Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "action-translation",
"version": "0.26.0",
"version": "0.27.0",
"private": true,
"type": "module",
"description": "GitHub Action to sync and review translations across repositories",
Expand Down
Loading