## Gentleman-Programming/gentle-ai — v3.4.0…v3.5.0

_88 commits._

### Features
- **feat(pr-check): support strict non-closing issue references** (9c8d107)
- **feat(state): record last_synced_at after successful sync (#3906)** (f0782af)
- **feat(review): turn receipt-driven development on by default (#4803)** (95edf9f)

### Fixes
- **fix(policy): validate activation snapshot records** (1093fa3)
- **fix(policy): require complete activation snapshot** (bac5ae5)
- **Merge pull request #4847 from egdev6/fix/4846-v2-catalog-test-race** (31510af)
- **fix(pr-check): accept the colon separator and reject out-of-range numbers** (94a5751)
- **fix(pr-check): parse the event body instead of binding a fetched one** (834ae3c)
- **fix(pr-check): keep template guidance parser-safe** (d455f74)
- **fix(pr-check): ignore references embedded in URLs** (f4791e4)
- **fix(pr-check): request full PR representation** (455d491)
- **fix(pr-check): reject missing reference separators** (e3d6067)
- **fix(pr-check): parse GitHub rendered body text** (1f87696)
- **fix(pr-check): reject hidden multiline issue references** (0093bb9)
- **Merge pull request #4078 from ardelperal/fix/3262-preserve-custom-variant-empty-effort** (6c31484)
- **Merge pull request #4839 from egdev6/fix/2854-locale-independent-native-cause** (d45bc42)
- **Merge pull request #4838 from egdev6/fix/1809-cli-uninstall-tui-state-lock** (79cd009)
- **fix(state): serialize the sync, uninstall and TUI state writers under the lock** (bf0adfa)
- **Merge branch 'main' into fix/3262-preserve-custom-variant-empty-effort** (21ea024)
- **fix(state): serialize the app whole-state writers under the canonical lock (#4833)** (81b3a73)
- **Merge pull request #4832 from egdev6/fix/1678-gentle-logo-registration-rollback** (194f97a)
- **fix(opencode): compensate the source when its own write lands with an error** (53dea93)
- **Merge pull request #4835 from Gentleman-Programming/fix/opencode-validator-refusal-cause** (af4ce12)
- **fix(review): name typed refusal causes in OpenCode provider-role capture** (0c9b5f2)
- **fix(opencode): compensate tui.json too when registration lands with an error** (f8e9e06)
- **fix(opencode): roll back the Gentle Logo source when TUI registration fails** (2a44af5)
- **fix(review): emit fail-closed envelope on assess error and use v2 preflight failure (#4822)** (27d8cf5)
- **fix(novedades): anchor the archived edition's commit range to its release tag** (5ce7778)
- **fix(install): replace the Unix binary atomically (#1728) (#3629)** (b2ed720)
- **Merge pull request #4043 from danielxxomg/fix/4042-opencode-model-discovery-streaming** (8e124d0)
- **fix(opencode): bound discovery shutdown against escaped descendants and preserve read errors** (93288f6)
- **Merge remote-tracking branch 'upstream/main' into fix/4042-opencode-model-discovery-streaming** (a10c838)
- **fix(sdd): preserve custom agent variant when assignment.Effort is empty (#3262)** (bf15092)
- **fix(opencode): extract cost and variants in configured models** (38ca12f)
- **fix(opencode): kill descendant process tree on windows cancellation** (45bc5ce)
- **fix(opencode): join stdout drain before reaping child process** (08842fa)
- **fix(opencode): honor Read exit-status contract and drop diagnostic leftover** (6c69d4b)
- **fix(opencode): surface child exit status and bound stdout drain** (9425db7)
- **fix(opencode): allow catalogs ending exactly at the 16 MiB ceiling** (a5d4038)
- **fix(opencode): stream runtime model catalog and clarify picker errors** (de1d6a7)

### Backend
- **Merge pull request #4871 from egdev6/docs/1017-windows-native-delegation** (0b335e4)
- **Merge pull request #4870 from ElCaaarnal/docs/retire-novedades** (bc4b36e)
- **Merge pull request #4861 from egdev6/test/4121-opencode-4r-egress** (654200a)
- **Merge pull request #4859 from egdev6/test/3687-reviewerprovider-windows-guards** (fdbc7d3)
- **Merge pull request #4858 from egdev6/ci/3586-dormant-size-gate** (0bc1402)
- **Merge pull request #4856 from ElCaaarnal/docs/readme-banner-animation** (69d6bf9)
- **Merge pull request #4852 from Gentleman-Programming/test/4843-windows-full-suite-portability** (f4242e8)
- **Merge pull request #4851 from egdev6/test/3406-journey-number-prefix-collision** (fb948d6)
- **Merge pull request #4844 from egdev6/feat/3352-strict-non-closing-references** (a773ccf)
- **Merge pull request #4829 from ElCaaarnal/docs/novedades-utc-window** (134409f)
- **Merge pull request #4825 from ElCaaarnal/docs/novedades-daily-pdf** (89500a7)
- **Merge pull request #4818 from ElCaaarnal/docs/novedades-archive** (2336d09)

### Tests
- **test(e2e): isolate the OpenCode 4R journey from live npm egress** (9fc1f20)
- **test(reviewerprovider): run the Windows-guarded adapter process tests** (cb40dd0)
- **test(policy): scope lifecycle assertions** (f901b86)
- **test(policy): scope permission assertions** (30e7eb9)
- **test(policy): anchor workflow permission assertions** (dd61318)
- **test(policy): cover fail-closed JSON key parsing** (88fb68f)
- **test(bench): reject duplicate journey number prefixes** (575b754)
- **test(assets): observe only published cache entries in the V2 catalog test** (88693a6)
- **test(assets): wait for the plugin cache instead of a fixed 30ms sleep** (4f3f09f)
- **test(windows): make three Windows-only test assertions platform-correct** (29bbfe5)
- **test(bench): pin the preserved custom-agent variant in j97** (4651442)
- **test(cli): render the native not-exist cause from the running installation** (c698116)
- **test(review): pin admission-wrapped inconclusive classification** (5579fad)
- **test(opencode): isolate live host tests and test windows assignment fallback** (197dd9f)
- **test(opencode): drop unused helper setup in exit-status test** (a40d772)
- **test(opencode): reuse catalog fixture generator and skip empty live hosts** (13bdf47)
- **test(opencode): pin maintainer-reported catalog regressions** (94cd39a)
- **test(opencode): make catalog regression tests host-portable** (0a42dc1)

### Docs
- **docs(opencode): pass the project directory and quote the task literally** (7d3e027)
- **docs(opencode): reframe the Windows-native delegation recipe after review** (b299c4f)
- **docs(opencode): add Windows-native delegation recipe using wt -w for gentle-orchestrator** (05effef)
- **docs(novedades): retire the in-repo publication in favor of Discord delivery** (075bff8)
- **docs(readme): animate the banner** (7df2bab)
- **docs(novedades): align the 2026-09-20 edition with its PDF layout** (8a2e6f3)
- **docs(novedades): cut daily editions at a fixed UTC day window** (717de25)
- **docs(novedades): deliver a PDF daily and make the release asset optional** (71ac5f0)
- **docs(novedades): drop the maintainer-only production steps from the README** (a92356b)
- **docs(odd): record the novedades daily-Markdown rework in task history** (e1f90ab)
- **docs(novedades): switch to daily Markdown editions with chained ranges** (981d9b2)
- **docs(odd): record novedades archive verification evidence** (bb88684)
- **docs(novedades): link the archive from the README and scope the rebuild claim** (d6eae1c)
- **docs(novedades): archive the periodic main changelog and its template** (bd25874)
- **docs(tui): document catalog error diagnostics and picker lifecycle** (7695905)

### Chore
- **ci(policy): decode escaped property names in duplicate key detection** (4821294)
- **ci(policy): enforce duplicate key rejection, explicit activation facts, and minimal permissions** (67c1b5b)
- **ci(policy): install dormant base-controlled 400-line gate** (f7593cd)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/Gentleman-Programming/gentle-ai?utm_source=github-action)._