Skip to content

Commit d2e26f8

Browse files
authored
Merge pull request #150 from Lykhoyda/fix/issue-91-mutation-absence-config-override
fix(gh-91): per-project verification config override + hot-path memoization
2 parents a8e4d39 + 01752f7 commit d2e26f8

17 files changed

Lines changed: 1361 additions & 18 deletions

.claude-plugin/marketplace.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
{
1010
"name": "rn-dev-agent",
1111
"description": "AI agent that fully tests React Native features on simulator/emulator — navigates the app, verifies UI, walks user flows, and confirms internal state.",
12-
"version": "0.44.36",
12+
"version": "0.44.37",
1313
"source": "./",
1414
"category": "mobile-development",
1515
"homepage": "https://github.com/Lykhoyda/rn-dev-agent"

.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "rn-dev-agent",
3-
"version": "0.44.36",
3+
"version": "0.44.37",
44
"description": "AI agent that fully tests React Native features on simulator/emulator — navigates the app, verifies UI, walks user flows, and confirms internal state.",
55
"author": {
66
"name": "Anton Lykhoyda",

CHANGELOG.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,41 @@ All notable changes to rn-dev-agent will be documented in this file.
44

55
Format follows [Keep a Changelog](https://keepachangelog.com/).
66

7+
## [0.44.37] — 2026-05-12
8+
9+
### Added (GH #91 acceptance #3 closeout — per-project verification config)
10+
11+
- **`verification.successShapes` and `verification.mutationMethods` per-project
12+
overrides** in `.rn-agent/config.json` for the mutation-absence detector.
13+
Closes the last open acceptance criterion on GH #91. Detector itself shipped
14+
in `fed0dd0` (Apr 28).
15+
- New `loadVerificationConfig(projectRoot)` reads the config once per project
16+
root and caches the result. Defaults are preserved (no behavior change) on
17+
missing file, parse error, missing `verification` block, empty arrays, or
18+
all-invalid regex strings — apps that don't opt in see zero change.
19+
- **ReDoS-via-typo guard** (Codex review conf 90): patterns longer than 200
20+
chars are dropped before compilation, and matched-input length is capped
21+
at 256 chars in `isSuccessShape`. Bounds regex evaluation cost on the
22+
`cdp_navigate` / `cdp_navigation_state` / `proof_step` hot path so a
23+
developer typo can't stall the MCP event loop.
24+
- **Empty-array means defaults**, not "disable detection" (Codex review conf
25+
92). Silent loss of a safety net is the worse failure mode; explicit disable
26+
is reserved for a future `verification.disable: true` flag.
27+
- **Observability**: one stderr log line on first config load per project root
28+
(`[verification] loaded config from .../.rn-agent/config.json (patterns: N,
29+
methods: M)`). Makes "is my config picked up?" a one-line check, without
30+
needing SIGHUP/watcher reload machinery.
31+
- 18 new tests cover the loader, overrides, ReDoS guards, cache behavior, and
32+
the observability log. Suite: 1312 → 1330 tests, all passing.
33+
34+
### Notes
35+
36+
- `device_press` / `cdp_interact` wirings remain **intentionally deferred** as
37+
documented in the original `fed0dd0` commit message: these tools don't carry
38+
nav-state intent, and the success-shape signal is captured downstream by the
39+
next `cdp_navigation_state` call. Adding nav-state fetches per tap would
40+
bloat the hot path for noise this PR considers low-value.
41+
742
## [0.44.36] — 2026-05-12
843

944
### Fixed (Phase 134.2-followup — device_deeplink url injection)

0 commit comments

Comments
 (0)