Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
240 commits
Select commit Hold shift + click to select a range
a03423e
test: make the suite engine-independent and guard the client boundary
claude Oct 22, 2026
6ac740f
fix(lifecycle): contain the internal-route mount and follow reloads i…
claude Oct 22, 2026
aa3c01b
fix: price, list and key requests on the plane they belong to; isolat…
claude Oct 22, 2026
54a5b19
fix(store): mount the inspection remote, and read legacy keys per int…
claude Oct 22, 2026
8a5e95f
docs: describe the tree that exists, and the guarantees the suite now…
claude Oct 22, 2026
52f175f
docs: add the improvement plan from the architecture review
claude Oct 22, 2026
603d378
docs(plan): the approved refactor plan, with the host's own contracts
claude Oct 22, 2026
0a0dbb0
docs(plan): route every mode through the user's own provider
claude Oct 23, 2026
d4e3067
docs(plan): the plugin owns the plane routes, measured on pi 1.1.0
claude Oct 23, 2026
a38259c
docs(plan): fold the reviewed design and the build order into the plan
claude Oct 23, 2026
cd3107e
fix: repair what shipped broken in 1.4.1
claude Oct 23, 2026
73d60e4
docs(plan): P1a is in review
claude Oct 23, 2026
2bbb673
chore: remove dead code and tighten the repository's gates
claude Oct 23, 2026
e8944cc
feat: a smaller public API
claude Oct 23, 2026
f276902
build: pin the host the plugin runs on
claude Oct 23, 2026
6182886
test: a harness that is the real host
claude Oct 24, 2026
9ccdeb3
refactor: one way to patch a host method
claude Oct 24, 2026
813e6f3
chore: refresh the generated catalog and limits tables
claude Oct 24, 2026
a3d096b
Merge branch 'claude/vigilant-mendel-bctz9n' into p1a
claude Oct 24, 2026
2339c48
Merge branch 'claude/vigilant-mendel-bctz9n-p1a' into p1b
claude Oct 24, 2026
8b6cde6
Merge branch 'claude/vigilant-mendel-bctz9n-p1b' into p2
claude Oct 24, 2026
fb23df4
Merge branch 'claude/vigilant-mendel-bctz9n-p-t1a' into p-t1b
claude Oct 24, 2026
9cd81de
Merge branch 'claude/vigilant-mendel-bctz9n-p-t1b' into p-h
claude Oct 24, 2026
1a568f9
Merge branch 'claude/vigilant-mendel-bctz9n-p2' into p-t1a
claude Oct 24, 2026
c7121a3
feat: the plugin owns the opencode and opencode-go routes
claude Oct 24, 2026
50d39f5
Merge branch 'claude/vigilant-mendel-bctz9n-p-h' into p-r1
claude Oct 24, 2026
2728666
test: measure which endpoint families the gateway serves
claude Oct 24, 2026
4c491fe
Merge branch 'claude/vigilant-mendel-bctz9n-p-r1' into p-r2
claude Oct 24, 2026
1c11d22
feat: Settings offers the catalog's models pi does not list
claude Oct 24, 2026
8c04672
test: restructure the suite
claude Oct 25, 2026
2ebaffc
chore: refresh the generated catalog and limits tables
claude Oct 26, 2026
d51a3e6
test: skip free models the gateway has withdrawn in the live suite
claude Oct 26, 2026
409b5e1
fix: address the second review of P-T1b
claude Oct 26, 2026
aec8c1a
Merge branch 'claude/vigilant-mendel-bctz9n-p-t1b' into p-h
claude Oct 26, 2026
0dd1b9c
Merge branch 'claude/vigilant-mendel-bctz9n' into p1a
claude Oct 26, 2026
1f5ed90
Merge branch 'claude/vigilant-mendel-bctz9n-p1a' into p1b
claude Oct 26, 2026
05faa93
Merge branch 'claude/vigilant-mendel-bctz9n-p1b' into p2
claude Oct 26, 2026
73db37b
Merge branch 'claude/vigilant-mendel-bctz9n-p2' into p-t1a
claude Oct 26, 2026
9f7e8e2
Merge branch 'claude/vigilant-mendel-bctz9n-p-t1a' into p-t1b
claude Oct 26, 2026
1f48272
test: follow the vendor catalog refresh
claude Oct 26, 2026
3cfacd9
fix: address the second review of P-H
claude Oct 26, 2026
bffd3a4
Merge branch 'claude/vigilant-mendel-bctz9n-p-h' into p-r1
claude Oct 26, 2026
8ab5d65
Merge branch 'claude/vigilant-mendel-bctz9n-p-t1b' into p-h
claude Oct 26, 2026
25dc182
Merge branch 'claude/vigilant-mendel-bctz9n-p-h' into p-r1
claude Oct 26, 2026
9cf8372
test: follow the vendor catalog refresh
claude Oct 26, 2026
0cceb81
fix: address the second review of P-R1
claude Oct 27, 2026
9f694bf
Merge branch 'claude/vigilant-mendel-bctz9n-p-r1' into p-r2
claude Oct 27, 2026
059236a
ci: gate freshness only on a pull request's own generator changes
claude Oct 27, 2026
d13cbe2
chore: refresh the generated catalog after Zen retired deepseek-v4-flash
claude Oct 27, 2026
32f2d71
Merge branch 'claude/vigilant-mendel-bctz9n' into claude/vigilant-men…
claude Oct 27, 2026
64c8acc
Merge branch 'claude/vigilant-mendel-bctz9n-p1a' into claude/vigilant…
claude Oct 27, 2026
6988e7a
Merge branch 'claude/vigilant-mendel-bctz9n-p1b' into claude/vigilant…
claude Oct 27, 2026
aba2c4a
Merge branch 'claude/vigilant-mendel-bctz9n-p2' into claude/vigilant-…
claude Oct 27, 2026
c6d8965
Merge branch 'claude/vigilant-mendel-bctz9n-p-t1a' into claude/vigila…
claude Oct 27, 2026
c6077be
Merge branch 'claude/vigilant-mendel-bctz9n-p-t1b' into claude/vigila…
claude Oct 27, 2026
3d7cb38
test: give the freshness walk's dynamic import a script-local target
claude Oct 27, 2026
e4aa0c9
Merge branch 'claude/vigilant-mendel-bctz9n' into claude/vigilant-men…
claude Oct 27, 2026
94c3a22
Merge branch 'claude/vigilant-mendel-bctz9n-p1a' into claude/vigilant…
claude Oct 27, 2026
14c1544
Merge branch 'claude/vigilant-mendel-bctz9n-p1b' into claude/vigilant…
claude Oct 27, 2026
8ee4245
Merge branch 'claude/vigilant-mendel-bctz9n-p2' into claude/vigilant-…
claude Oct 27, 2026
5133c0c
Merge branch 'claude/vigilant-mendel-bctz9n-p-t1a' into claude/vigila…
claude Oct 27, 2026
b518061
Merge branch 'claude/vigilant-mendel-bctz9n-p-t1b' into claude/vigila…
claude Oct 27, 2026
3ccd70c
fix: address the second review of P-R2
claude Oct 27, 2026
79d0036
Merge branch 'claude/vigilant-mendel-bctz9n-p-r2' into p3
claude Oct 27, 2026
29b43ca
chore: refresh the generated catalog after Zen retired deepseek-v4-flash
claude Oct 27, 2026
4891c07
test: follow the vendor catalog refresh
claude Oct 27, 2026
4dbd22e
fix: send Google's thinking level to Gemini models the catalog gives …
claude Oct 27, 2026
d8821f0
Merge remote-tracking branch 'origin/claude/vigilant-mendel-bctz9n-p-…
claude Oct 27, 2026
dec00c8
docs: correct the Go shape count, the README date and the install range
claude Oct 27, 2026
be649da
Merge remote-tracking branch 'origin/claude/vigilant-mendel-bctz9n-p-…
claude Oct 27, 2026
d16a600
docs: date the refreshed model count and correct three stale figures
claude Oct 27, 2026
f8a4af3
Merge branch 'claude/vigilant-mendel-bctz9n' into claude/vigilant-men…
claude Oct 27, 2026
cb3cdda
Merge branch 'claude/vigilant-mendel-bctz9n-p1a' into claude/vigilant…
claude Oct 27, 2026
3d461c2
Merge branch 'claude/vigilant-mendel-bctz9n-p1b' into claude/vigilant…
claude Oct 27, 2026
659b0f3
Merge branch 'claude/vigilant-mendel-bctz9n-p2' into claude/vigilant-…
claude Oct 27, 2026
fa6a5bd
Merge branch 'claude/vigilant-mendel-bctz9n-p-t1a' into claude/vigila…
claude Oct 27, 2026
c82fa3e
Merge branch 'claude/vigilant-mendel-bctz9n-p-t1b' into claude/vigila…
claude Oct 27, 2026
a583874
Merge branch 'claude/vigilant-mendel-bctz9n-p-h' into claude/vigilant…
claude Oct 27, 2026
72852fb
Merge branch 'claude/vigilant-mendel-bctz9n-p-r1' into claude/vigilan…
claude Oct 27, 2026
dbe995e
fix: address the second review of P3
claude Oct 27, 2026
3794482
Merge branch 'claude/vigilant-mendel-bctz9n-p3' into p-t2
claude Oct 27, 2026
c0ac147
chore: refresh the generated catalog after Zen retired deepseek-v4-flash
claude Oct 27, 2026
61e2c5d
docs: close the audit's remaining findings on P-R1
claude Oct 27, 2026
1c91312
Merge remote-tracking branch 'origin/main' into claude/vigilant-mende…
claude Nov 2, 2026
854a337
chore: follow the vendor's retirement of nemotron-3-ultra-free
claude Nov 2, 2026
b0f0bdc
test: walk past a model the gateway answers ModelDeprecated for
claude Nov 2, 2026
15e6236
test: install the plane-lookup world before each test
claude Nov 2, 2026
2454609
test(scripts): move the generated-table skip into the CLI-version rules
claude Nov 2, 2026
beae0ca
test(e2e): read an upstream's 400 "Model is unavailable" as a retirement
claude Nov 2, 2026
1d4aaab
docs(testing): describe the suite this branch keeps
claude Nov 2, 2026
4b0ebea
test(e2e): keep the free-tier case's narrowing in the subject picker
claude Nov 2, 2026
979ea27
chore(vendor): follow opencode 1.19.5
claude Nov 2, 2026
28fee8d
docs(plan): restack the plan onto 1.8.0 and the alpha host
claude Nov 2, 2026
8b9da84
build: raise the client bundle ceiling to 136 KB
claude Nov 2, 2026
281fc9f
docs: complete the restack of P0
claude Nov 2, 2026
6812723
docs: close the restack review of P0
claude Nov 2, 2026
7cd12d3
docs: hold the meter's allowance figures to the generated table
claude Nov 3, 2026
e3216d1
Merge remote-tracking branch 'origin/claude/vigilant-mendel-bctz9n' i…
claude Nov 3, 2026
73d5465
style: lint and format the merged purge row and token test
claude Nov 3, 2026
2ecf689
fix: complete the restack of P1a
claude Nov 3, 2026
252d0f8
docs: state the measured meter-scan reasons and P1a's refusal test cases
claude Nov 3, 2026
bf5717b
Merge remote-tracking branch 'origin/claude/vigilant-mendel-bctz9n-p1…
claude Nov 3, 2026
5e60c1b
test: one catalogue fixture, behind the one door
claude Nov 3, 2026
f3697a5
docs: describe debugFile by the gate main chose (D24)
claude Nov 3, 2026
074c834
style: satisfy main's promise lint in the retry test
claude Nov 3, 2026
19f05e6
docs(plan): record P1b's restack
claude Nov 3, 2026
8e9f36e
test: keep the fallback case's comment free of a model name
claude Nov 3, 2026
7136ca0
fix: complete the restack of P1b
claude Nov 3, 2026
786de90
docs: name the setup file in the door rule and count the fixture's en…
claude Nov 3, 2026
239d635
docs(plan): record the both-channel host question for P-T1a
claude Nov 3, 2026
bab4fc8
Merge remote-tracking branch 'origin/claude/vigilant-mendel-bctz9n-p1…
claude Nov 3, 2026
521b98f
test: route main's new tests through the one door
claude Nov 3, 2026
737a49d
docs(testing): drop the wrapper forwarder P2 retires again
claude Nov 3, 2026
c15aca0
docs: stop the count sweep record asserting a superseded catalog
claude Nov 3, 2026
798ba2e
chore: refresh the generated catalog for pulse-alpha-free
claude Nov 3, 2026
749669c
Merge branch 'claude/vigilant-mendel-bctz9n' into claude/vigilant-men…
claude Nov 3, 2026
835c793
Merge branch 'claude/vigilant-mendel-bctz9n-p1a' into claude/vigilant…
claude Nov 3, 2026
0563db6
chore: merge the parent's catalog refresh into P2
claude Nov 3, 2026
394e892
Merge remote-tracking branch 'origin/claude/vigilant-mendel-bctz9n-p2…
claude Nov 3, 2026
d65ed21
build: switch the dev install between the harness channels
claude Nov 3, 2026
f595d2d
test: fail if src reads what the desktop's patched pi changes
claude Nov 3, 2026
ea228a6
ci: run the unit and mock suites on both harness channels
claude Nov 3, 2026
90048d7
docs: record the both-channel, no-patch host policy
claude Nov 3, 2026
bcae61f
docs: keep the plan's D14'' row one table cell
claude Nov 3, 2026
44a6d5b
docs: complete the restack of P-T1a
claude Nov 3, 2026
bce1863
test: hold the relock's lockfile strip and name the channel switch's …
claude Nov 3, 2026
4679c1d
fix: report harness channel drift nightly and complete the restack of…
claude Nov 3, 2026
6310663
fix: keep Dependabot and the rc lockfile inside the channel-bump rule…
claude Nov 3, 2026
fb6a686
Merge remote-tracking branch 'origin/claude/vigilant-mendel-bctz9n-p-…
claude Nov 3, 2026
0101239
test: characterize the real host on both harness channels, newest and…
claude Nov 3, 2026
017adad
ci: boot each channel's published binary, as npm installs it and at t…
claude Nov 3, 2026
e1d775c
docs: describe the host cells and the per-channel binary e2e
claude Nov 3, 2026
4871d87
test: name the host cell each row and dispatch set belongs to
claude Nov 3, 2026
79ef58a
test: record the alpha host's broken save as a host limitation
claude Nov 3, 2026
8688046
fix: pin the e2e-host floor cell to the shipped tree and narrow its h…
claude Nov 4, 2026
c1fca83
fix: hold the cordis family to the declared range floors
claude Nov 4, 2026
ec38185
fix: hold the cordis family at the record's floors through a relock
claude Nov 4, 2026
011b99e
Merge remote-tracking branch 'origin/claude/vigilant-mendel-bctz9n-p-…
claude Nov 4, 2026
d001586
docs: pair the reload bullet in the Chinese README
claude Nov 4, 2026
ff2db1d
docs: retitle P-H as the fix it ships
claude Nov 4, 2026
58ba532
Merge remote-tracking branch 'origin/claude/vigilant-mendel-bctz9n-p-…
claude Nov 4, 2026
4a66384
fix: leave the Google thinking control to the host's pi
claude Nov 4, 2026
7ed93a7
fix: route by the plugin's own endpoint table, never pi's catalog
claude Nov 4, 2026
34d6959
fix: size undescribed models with pi-ai's own defaults, not a copy
claude Nov 4, 2026
fa53d8e
docs: cite both channels' host lines and correct the session header c…
claude Nov 4, 2026
db81e7e
test: size the adapter's toggle case through pi-ai's own Config
claude Nov 4, 2026
48776d2
test: hold every remote codec's two parser doors to one parser
claude Nov 4, 2026
0a165d6
test: record the floor's budget refusal in the dispatch cases
claude Nov 4, 2026
2701c88
test: record where the route claim cannot engage on the alpha npm host
claude Nov 4, 2026
76d11e0
fix: complete the restack of P-R1
claude Nov 4, 2026
8bb7b7f
docs: record the withdrawn thinking-level rewrite and finish the P-R1…
claude Nov 4, 2026
26d1e74
docs: complete the restack review of P-R1
claude Nov 4, 2026
7fec19d
Merge remote-tracking branch 'origin/claude/vigilant-mendel-bctz9n-p-…
claude Nov 4, 2026
53388e2
test(mock): the mock serves every dispatched request and no root one
claude Nov 4, 2026
67faee7
test: record the refusal, header and family shapes the community plug…
claude Nov 4, 2026
b9bff93
test: the dispatch derivation reads the root shape P-R2 probes
claude Nov 4, 2026
7322b8b
test: the endpoint-family pins use stand-in route defaults
claude Nov 4, 2026
6c4c643
fix: read ModelDeprecated as gone in every probe classifier and finis…
claude Nov 4, 2026
24fcf00
fix: name the session gate a capped free walk met, and close P-R2's p…
claude Nov 4, 2026
de9bfc0
Merge remote-tracking branch 'origin/claude/vigilant-mendel-bctz9n-p-…
claude Nov 4, 2026
da3dec9
docs: record what the restack changed for P3 in the plan
claude Nov 4, 2026
f006ce6
fix: offer Settings fetch's catalog complement only once the route cl…
claude Nov 4, 2026
38f19dc
test: a harness that is the real host
claude Nov 12, 2026
9cc5cd6
test: pin the host contracts for both internal/config call shapes
claude Nov 12, 2026
2db6e7b
test: re-measure the host cells on rc 0.2.2-rc.2 and alpha 0.2.2-alpha.3
claude Nov 12, 2026
d4723c2
test: pin the bridges' route-level api set per channel, and state bot…
claude Nov 12, 2026
0a000c5
docs: put P-T1b on main 1.9.2 and name the cores and owners the revie…
claude Nov 12, 2026
6786ee2
Merge the pre-rebase tip of claude/vigilant-mendel-bctz9n-p-t1b (hist…
claude Nov 12, 2026
0b2cf31
fix: disabling or reloading the plugin restores the host methods it w…
claude Nov 12, 2026
bea5722
docs: cite the new cordis core for the shadow-method trap, and name t…
claude Nov 12, 2026
da01f95
Merge the pre-rebase tip of claude/vigilant-mendel-bctz9n-p-h (histor…
claude Nov 12, 2026
57b0851
Merge origin/main (#168) into claude/vigilant-mendel-bctz9n-p-t1b
claude Nov 12, 2026
b1d8e29
Merge claude/vigilant-mendel-bctz9n-p-t1b (#110's head, with main #16…
claude Nov 12, 2026
e13848d
Merge origin/main (#110 squash) into claude/vigilant-mendel-bctz9n-p-h
claude Nov 12, 2026
d90f066
feat: the plugin owns the opencode and opencode-go routes
claude Nov 12, 2026
0ab3fa7
fix: the route claim speaks both internal/config call shapes
claude Nov 12, 2026
9ba2290
fix: plane profiles carry pi-ai's image bounds where pi-ai defines them
claude Nov 12, 2026
d4f6557
test: the binary e2e expects the claim on both host cores
claude Nov 12, 2026
5f82bd1
test: the route claim through a pi-ai row the loader removed first
claude Nov 12, 2026
bbd924d
docs: record the new host core and the claim on both shapes
claude Nov 12, 2026
aa70a43
fix: the route claim's re-append never throws into pi-ai's status emit
claude Nov 12, 2026
1f80a51
docs: mark P-T1b and P-H merged, and put P-R1 on main 1.9.2
claude Nov 12, 2026
0b6fc99
docs: the plan's summaries say P0 to P-H are merged
claude Nov 12, 2026
974b43a
Merge the pre-rebase tip of claude/vigilant-mendel-bctz9n-p-r1 (histo…
claude Nov 12, 2026
b54b1de
test: measure which endpoint families the gateway serves
claude Nov 12, 2026
a706d44
docs: record P-R2's dispatch set re-measured on the new host core
claude Nov 12, 2026
af1de77
Merge the pre-rebase tip of claude/vigilant-mendel-bctz9n-p-r2 (histo…
claude Nov 12, 2026
e04e719
Merge claude/vigilant-mendel-bctz9n-p-h (this PR's base) into claude/…
claude Nov 12, 2026
3eb8541
feat: Settings offers the catalog's models pi does not list
claude Nov 12, 2026
60f6552
test: the F21 restart case finds pi-ai's fiber by uid on the new core
claude Nov 12, 2026
c35e6a4
test: Settings' fetch follows the claim's engagement on the new core
claude Nov 12, 2026
40bb655
test: the binary e2e's Settings fetch rows run in every cell of both …
claude Nov 12, 2026
cbca50a
docs: P3's guard on the new core, and its e2e rows in every cell
claude Nov 12, 2026
6c172fe
test: name the pi versions host-discovery's capacity check is measure…
claude Nov 12, 2026
a7cb95a
test: drive Settings' fetch guard through states the host cores reach
claude Nov 13, 2026
33925ef
Merge origin/main (#170, #159) into claude/vigilant-mendel-bctz9n-p-r1
claude Nov 13, 2026
77f538b
fix: Settings' fetch answers the catalog through a handover's restart
claude Nov 13, 2026
96789b4
docs: the plan's patch-method section reads claiming() as the other r…
claude Nov 13, 2026
fdd1ec8
Merge the pre-rebase tip of claude/vigilant-mendel-bctz9n-p3 (history…
claude Nov 13, 2026
71dae39
docs: the plan's P3 rebase note counts four cases and says which chan…
claude Nov 13, 2026
8648541
test: restructure the suite
claude Nov 13, 2026
c3a715a
test: the route claim's stand-in models both cordis cores in one place
claude Nov 13, 2026
8a0cc97
docs: record P-T2's rebase onto P3 and where the new core's cases landed
claude Nov 13, 2026
d3be8ab
test: the refusal oracle classifies a 403 through the installed pi-ai
claude Nov 13, 2026
e18d5b5
test: the refusal oracle's control reads the probe's words, and logLi…
claude Nov 13, 2026
6fcd5b5
docs: place the route claim's stand-in in its support file and record…
claude Nov 13, 2026
11410fd
Merge the pre-rebase tip of claude/vigilant-mendel-bctz9n-p-t2 (histo…
claude Nov 13, 2026
5ecc037
fix: the route claim steps aside for a plane another plugin owns
claude Nov 13, 2026
e21f99d
docs: D27, and the routes OpenCode Console serves
claude Nov 13, 2026
6527780
fix: keep the plugin off every stepped-aside plane, by realm or marker
claude Nov 13, 2026
d63a24c
docs: D27 names the realm by what each context resolves, and covers t…
claude Nov 13, 2026
a1db1d2
fix: a live change of pi-ai's realm alone moves its planes, with one …
claude Nov 13, 2026
51f4626
fix: the purge never rewrites a plane entry another plugin owns
claude Nov 13, 2026
7052ab0
test: pin the step-aside's multi-row branches and the save check on a…
claude Nov 13, 2026
574604e
docs: D27 covers a realm-only live edit and the purge
claude Nov 13, 2026
140c9c9
fix: a live realm change on the plugin's own row or a group moves the…
claude Nov 13, 2026
3c85d97
fix: a marker saved beside a second pi-ai row releases the plane in t…
claude Nov 13, 2026
d58994b
test: perform the discovery and meter step-aside through the applied …
claude Nov 13, 2026
b2d5a86
docs: D27 covers every row's realm edit and the second-row release; t…
claude Nov 13, 2026
219263f
Merge claude/vigilant-mendel-bctz9n-p-r1 (D27 step-aside, main #170/#…
claude Nov 13, 2026
d563282
test: the endpoint setting never moves a plane another plugin owns
claude Nov 13, 2026
25c8c9e
Merge claude/vigilant-mendel-bctz9n-p-r2 (D27 step-aside, main #170/#…
claude Nov 13, 2026
c1d9e86
fix: Settings leaves a stepped-aside plane's list to pi-ai
claude Nov 13, 2026
8b2fa44
fix: Settings leaves a foreign-realm row's undeclared plane to pi-ai
claude Nov 13, 2026
b20bf4b
Merge claude/vigilant-mendel-bctz9n-p3 (D27 step-aside, main #170/#15…
claude Nov 13, 2026
340bf68
docs: record where D27's cases landed in P-T2's layout
claude Nov 13, 2026
5c3854b
chore: refresh the generated catalog and limits tables
github-actions[bot] Nov 13, 2026
586c6b8
chore: follow the catalog refresh through the docs and tests
claude Nov 13, 2026
7534edc
docs: point the routes module header at the per-SDK counts instead of…
claude Nov 13, 2026
ff2f0d6
docs: say where the per-SDK counts live without claiming a single copy
claude Nov 13, 2026
152d0c0
docs: replace the retired muse-spark-1.3-contributor-free id in both …
claude Nov 13, 2026
37bcf0c
Merge the catalog refresh (#171) into claude/vigilant-mendel-bctz9n-p-r1
claude Nov 13, 2026
ce889ef
chore: follow the catalog refresh through P-R1's tests and docs
claude Nov 13, 2026
65b8443
Merge claude/vigilant-mendel-bctz9n-p-r1 (catalog refresh #171) into …
claude Nov 13, 2026
285aeaf
Merge claude/vigilant-mendel-bctz9n-p-r2 (catalog refresh #171) into …
claude Nov 13, 2026
50ef6ab
Merge claude/vigilant-mendel-bctz9n-p3 (catalog refresh #171) into cl…
claude Nov 13, 2026
3c79027
Merge main (#113) into claude/vigilant-mendel-bctz9n-p-r2 (history only)
claude Nov 13, 2026
5faf253
Merge claude/vigilant-mendel-bctz9n-p-r2 (main #113, history only) in…
claude Nov 13, 2026
995cb70
Merge claude/vigilant-mendel-bctz9n-p3 (main #113, history only) into…
claude Nov 13, 2026
d83146f
Merge main (#115) into claude/vigilant-mendel-bctz9n-p-t2 (history only)
claude Nov 13, 2026
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
10 changes: 8 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -507,6 +507,7 @@ jobs:
# version in the user agent the probes carry (identity.ts), the
# anthropic-version every Messages probe sends
# (request-shape.ts), and the probes' own inputs, CI arming
# and the environment reader that arms a key (e2e-env.ts)
# included. Left out, and covered by the offline suite and the
# nightly `full` run: the generated catalog (catalog-data.ts)
# and the live model choice (models-catalog.ts), which the
Expand All @@ -517,7 +518,7 @@ jobs:
# it. grep reads a here-string, not a pipe: under
# pipefail, `grep -q` exiting on an early match could kill the
# writer with SIGPIPE on a long path list and read as a miss.
if grep -Eq '^(src/host/|src/utils/protocols\.ts$|src/utils/plane-model\.ts$|src/identity\.ts$|src/utils/request-shape\.ts$|test/e2e/keyed-probes\.e2e\.ts$|test/support/keyed-probes\.ts$|test/support/keyless-matrix\.ts$|\.github/workflows/ci\.yml$)' <<<"$changed"; then
if grep -Eq '^(src/host/|src/utils/protocols\.ts$|src/utils/plane-model\.ts$|src/identity\.ts$|src/utils/request-shape\.ts$|test/e2e/keyed-probes\.e2e\.ts$|test/support/keyed-probes\.ts$|test/support/keyless-matrix\.ts$|test/support/e2e-env\.ts$|\.github/workflows/ci\.yml$)' <<<"$changed"; then
tier=probes
else
tier=none
Expand Down Expand Up @@ -652,8 +653,13 @@ jobs:
# generated catalog) is covered on each pull request by the
# in-process characterization of the same rows, on both channels,
# and here by the nightly run.
# The binary e2e's own inputs are in scope too: the file, the rows it
# asserts (support/host.ts), the versions it installs
# (support/host-versions.ts, which also selects its channel) and the
# reader its gate, prefix and cell come through (support/e2e-env.ts).
# test/keyed-probes.test.ts compiles this pattern and checks it.
# A here-string, not a pipe: see the e2e job's tier step.
if grep -Eq '^(src/host/|src/lifecycle\.ts$|src/identity\.ts$|src/cordis-context\.ts$|src/models-discovery\.ts$|src/fetch-patch\.ts$|src/stream-hook\.ts$|cordis\.patch\.yml$|test/e2e/host/|test/e2e/host-binary\.e2e\.ts$|test/support/host\.ts$|test/support/host-versions\.ts$|scripts/host-drift\.ts$|\.github/workflows/ci\.yml$|vitest\.e2e\.config\.ts$|vite\.config\.ts$)' <<<"$changed"; then
if grep -Eq '^(src/host/|src/lifecycle\.ts$|src/identity\.ts$|src/cordis-context\.ts$|src/models-discovery\.ts$|src/fetch-patch\.ts$|src/stream-hook\.ts$|cordis\.patch\.yml$|test/e2e/host/|test/e2e/host-binary\.e2e\.ts$|test/support/host\.ts$|test/support/host-versions\.ts$|test/support/e2e-env\.ts$|scripts/host-drift\.ts$|\.github/workflows/ci\.yml$|vitest\.e2e\.config\.ts$|vite\.config\.ts$)' <<<"$changed"; then
echo "run=true" >> "$GITHUB_OUTPUT"
else
echo "run=false" >> "$GITHUB_OUTPUT"
Expand Down
13 changes: 8 additions & 5 deletions AGENTS.md

Large diffs are not rendered by default.

33 changes: 22 additions & 11 deletions CONTRIBUTING.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/credentials.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ The plugin's default is the deployment's own credential: whatever `apiKeyEnv` th
a named apiKeyEnv → the credentials service (the launch environment only when no service is mounted)
no reference → pi's own lookup (a Sign-in record under llm-pi-ai/<plane>, then OPENCODE_API_KEY) → the installation's store (opt-in)

**pi's own lookup reads `OPENCODE_API_KEY` on both planes** (pi 1.1.0's `providers/opencode.js` and `providers/opencode-go.js` both name that one variable). So a Go entry that names no reference authenticates every Go turn with the Zen key, and a Go key stored in DSH Credentials reaches a Go turn only as the entry's `apiKeyEnv: OPENCODE_GO_API_KEY`. Before P-R1 the Go plane's Responses, Messages and Google turns defaulted to `OPENCODE_GO_API_KEY`; that default went with the hidden routes, and the README's "Changed in 1.x" names it. The meter inherits the consequence: the fetch interceptor files the bearer of a Go-plane request as a Go key, and the meter's `auto` order puts that captured key ahead of the configured `OPENCODE_GO_API_KEY`, so after the first Go turn of a no-reference Go entry the meter sends the Zen key to the Go usage endpoint, which refuses it. `test/host-planes.test.ts` pins both turn cases on the Go plane, and the meter's switch from the Go key to the captured Zen key.
**pi's own lookup reads `OPENCODE_API_KEY` on both planes** (pi 1.1.0's `providers/opencode.js` and `providers/opencode-go.js` both name that one variable). So a Go entry that names no reference authenticates every Go turn with the Zen key, and a Go key stored in DSH Credentials reaches a Go turn only as the entry's `apiKeyEnv: OPENCODE_GO_API_KEY`. Before P-R1 the Go plane's Responses, Messages and Google turns defaulted to `OPENCODE_GO_API_KEY`; that default went with the hidden routes, and the README's "Changed in 1.x" names it. The meter inherits the consequence: the fetch interceptor files the bearer of a Go-plane request as a Go key, and the meter's `auto` order puts that captured key ahead of the configured `OPENCODE_GO_API_KEY`, so after the first Go turn of a no-reference Go entry the meter sends the Zen key to the Go usage endpoint, which refuses it. `test/host-planes-credentials.test.ts` pins both turn cases on the Go plane, and the meter's switch from the Go key to the captured Zen key.

A named reference that resolves nothing is `MISSING_CREDENTIAL`, and no request is sent; a credentials service that fails propagates its own error rather than reading as a missing key. A captured or literal key never answers for the adapter. The installation's store is read only when the deployment sets `readOpencodeStore`, only for a plane that names no reference, and only when pi's own lookup would find nothing: the resolver's answer is handed to pi as the request's explicit key, which pi lets win over its own lookup, so a store key returned any earlier would outrank a Sign-in record or an exported `OPENCODE_API_KEY`.

Expand Down
6 changes: 3 additions & 3 deletions docs/engineering-notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ Worth keeping separate because the conclusions differ: the first is fixed by not

## Every count in the documentation, checked against the data

Two were missed while chasing the catalog's changes — Go's total and its no-SDK row — so the sweep was finished properly: every number stated in any document, compared against `catalog-data.ts`, and every live count in the docs agreed with the shim of that day. The counts are deliberately not restated here, because the shim has been regenerated since and a number in this paragraph is one no test reads: the current ones are the dated tables in [`redirect-planes.md`](./redirect-planes.md) §1 and §2, which `test/catalog.test.ts` reads back against the shipped shim.
Two were missed while chasing the catalog's changes — Go's total and its no-SDK row — so the sweep was finished properly: every number stated in any document, compared against `catalog-data.ts`, and every live count in the docs agreed with the shim of that day. The counts are deliberately not restated here, because the shim has been regenerated since and a number in this paragraph is one no test reads: the current ones are the dated tables in [`redirect-planes.md`](./redirect-planes.md) §1 and §2, which `test/catalog-docs.test.ts` reads back against the shipped shim.

Two numbers that look stale are not, and they are worth naming so the next sweep does not "fix" them: `0 of 31` appears once, inside this file, as a quotation of the mistake; and `16 of 17` is a recorded test result from the round that narrowed the header test, not a count of anything current.

Expand Down Expand Up @@ -318,13 +318,13 @@ So the class has one member left standing rather than a pattern, which is the po

## Why one document's counts never drifted, and the others' did

`protocol-routing-and-merge.md` states five counts — 28, 30, 18, 8 and 1 of 85 — and every one is correct, which is not luck. The document says why in its own words: _"a count written into prose does not regenerate with the data it counts"_, and it names the test that holds them. `catalog.test.ts` asserts the table against the shipped catalog, so a count that drifts fails the suite rather than sitting in a file.
`protocol-routing-and-merge.md` states five counts — 28, 30, 18, 8 and 1 of 85 — and every one is correct, which is not luck. The document says why in its own words: _"a count written into prose does not regenerate with the data it counts"_, and it names the test that holds them. `catalog-docs.test.ts` asserts the table against the shipped catalog, so a count that drifts fails the suite rather than sitting in a file.

That is the difference between the counts that were wrong this session and this one. The ones that drifted — Go 31, the Zen total in the plane table, the duplicated 12 and 13, the Chinese README's Google line — were all prose that nothing checked. The fix in each case was to correct it; the fix that would have prevented all of them is the one this document already applies, and it is worth copying rather than rediscovering: put the number where a test can reach it.

## The prose totals are still unguarded, and the attempt to guard them is recorded

`catalog.test.ts` already parses and asserts the tables in three documents — the README's routing table, `protocol-routing-and-merge.md`'s "N of M" pairs, and `redirect-planes.md`'s per-SDK matrix. Every count this repository has had to correct lived outside them, in a sentence: the README's total, the Chinese README's copy of it, and the plane table's "85 served / 120 listed". The mechanism that would have caught all three exists and is not pointed at them.
`catalog-docs.test.ts` already parses and asserts the tables in three documents — the README's routing table, `protocol-routing-and-merge.md`'s "N of M" pairs, and `redirect-planes.md`'s per-SDK matrix. Every count this repository has had to correct lived outside them, in a sentence: the README's total, the Chinese README's copy of it, and the plane table's "85 served / 120 listed". The mechanism that would have caught all three exists and is not pointed at them.

An attempt to add that case was made and reverted. The regex had to allow for the number being emphasised (`**85** active`), the escaping survived one round of edits and not the second, and the file ended up with no tests running at all. Reverted rather than left half-working, which is this session's rule and the reason the tree is green.

Expand Down
Loading
Loading