# RFC-029 PR③ — preset + upgrade-pin smoke

date: 2026-07-16T03:05:30+00:00
bun:  1.3.1
node: v18.20.4

## S1 — unit tests

```

 27 pass
 0 fail
 129 expect() calls
Ran 27 tests across 2 files. [335.00ms]
```

## S2 — auth.json / opencode.json materialization

```
auth=/tmp/pr3-node-workdir/.local/share/opencode/auth.json
cfg=/tmp/pr3-node-workdir/.config/opencode/opencode.json
authMode=600
```

  ✓ S2 auth.json exists: yes (expected yes)
  ✓ S2 auth.json mode: 600 (expected 600)
  ✓ S2 auth.json contains the expected synthetic key: yes (expected yes)

## S3 — auth.json denylist regex

```
88:  // Match anywhere under `.local/share/opencode/auth.json` so we
```

  ✓ S3 denylist regex present: yes (expected yes)

## S4 — unvetted upgrade-pin is rejected before npm

```
[anet] Refusing opencode-ai@99.99.99: this preview is vetted only for opencode-ai@1.18.1.
[anet] Install/smoke the exact release pin with: anet opencode upgrade-pin 1.18.1
[anet] A different upstream version requires a newly vetted preview.
exit=1
```

  ✓ S4 unvetted pin exits nonzero: yes (expected yes)
  ✓ S4 vetted-only refusal emitted: yes (expected yes)
  ✓ S4 npm was NOT invoked: no (expected no)
  ✓ S4 pin file NOT created on refusal: no (expected no)
  ✓ S5 denylist entry count: 20 (expected >=9)

OVERALL: PASS
