-
Notifications
You must be signed in to change notification settings - Fork 857
[WRONG BRANCH] release: promote dev to main for 2.27.0 #2159
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
154 commits
Select commit
Hold shift + click to select a range
c4965ad
docs(codex): explain deferred tool search boundary
Ingwannu b3eda11
docs(codex): separate code-mode and tool search discovery
Ingwannu 01ca3ae
fix(tools): support namespaced custom tool aliases
jenfonro 1259c79
fix(tools): reject ambiguous namespaced aliases
jenfonro d75a240
docs(devlog): plan response-state temp reclaim as a two-layer stack
lidge-jun b999f1d
fix: preserve discovered Google effort wire mappings
iF2007 265a21a
docs(devlog): fold audit round 1 into the reclaim roadmap
lidge-jun 6d89332
docs(devlog): lock the reclaim roadmap and record the pid-reuse secon…
lidge-jun f138dac
docs(devlog): fold audit round 2 into the phase 1 plan
lidge-jun 89fbd6f
feat(openrouter): enable Fast on the OpenAI-backed slugs, without rou…
olddonkey 0a8b95c
Merge remote-tracking branch 'upstream/dev' into codex/fastwire-b2-op…
olddonkey 48b0c2a
fix(responses): reclaim abandoned state temps on a timer, not only at…
lidge-jun 5682c62
docs(devlog): capture the OpenRouter Fast lower-bound rendering
olddonkey 04fb0f0
Merge remote-tracking branch 'upstream/dev' into codex/fastwire-b2-op…
olddonkey 816024c
docs(devlog): record phase 1 verification evidence
lidge-jun eceaf0b
fix(admission): resolve the per-model window the way the catalog does
ntdatt812 71ed29d
fix(cli): report model capabilities the way the runtime resolves them
ntdatt812 63bfd14
docs(governance): move @Wibias to former maintainers (#2098)
lidge-jun a7437dd
Merge commit '63bfd149dd04ffbe448f43004a17e371a514eb38' into codex/fa…
olddonkey d49538c
fix(gui): localize estimated cost totals
olddonkey 9cd3c1c
fix(gui): translate estimated cost labels
olddonkey 929a41f
fix(xai): preserve Claude Code tools with root $schema
hyohyeon08 78b8f90
fix(xai): strip root $schema from tool parameters
hyohyeon08 8ef4f4f
test(xai): strengthen tool schema regression coverage
hyohyeon08 f408914
fix(cli): give noVisionModels precedence over an exact modality entry
ntdatt812 1fbac66
fix(responses): close the directory iterator when a reclaim scan trun…
3f63e79
feat(doctor): report and reclaim abandoned response-state temps
lidge-jun 3d4a3fb
fix(doctor): close audit round 3 blockers on the reclaim surface
lidge-jun 990077e
docs(devlog): record phase 2 verification evidence
lidge-jun e298cf8
fix(doctor): report a truncated reclaim from a signal that can actual…
9732584
Merge pull request #2084 from lidge-jun/codex/tmp-reclaim-1-sweeper
lidge-jun c4bf833
Merge pull request #2089 from lidge-jun/codex/tmp-reclaim-2-doctor
lidge-jun a77d5f9
fix(catalog): allow per-provider/model opt-out of code_mode_only tool…
Yuxin-Qiao 02e4011
fix(catalog): inherit provider codexToolMode for custom models
Yuxin-Qiao 73dfa7c
fix(sync): apply explicit codexToolMode for native capability alias
Yuxin-Qiao 457a3b1
chore(sync): refine fallback comment and template fixture in test
Yuxin-Qiao e0585e5
Merge pull request #2085 from ntdatt812/fix/admission-family-context-…
lidge-jun 32d7b79
Merge pull request #2086 from ntdatt812/fix/cli-models-family-resolution
lidge-jun d86a2fa
fix(mimo): route Pro images through vision sidecar
Ingwannu 35664ad
Merge pull request #2035 from iF2007/fix/google-model-discovery-reaso…
lidge-jun a97c70d
Merge pull request #1878 from lidge-jun/ingw/docs-tool-search-trouble…
lidge-jun 7a2d13a
Merge pull request #2031 from lidge-jun/ingw/fix-mimo-vision-1927
lidge-jun 18e072c
Merge pull request #2103 from hyohyeon08/fix/xai-claude-tool-schema
lidge-jun 159d2ab
fix(windows): keep catalog discovery off request event loop
Ingwannu a71d81a
test(windows): pin request catalog cache boundaries
Ingwannu 53ffc9e
fix(windows): preserve short unknown catalog retries
Ingwannu 61a1eda
fix(windows): degrade an invalidated in-flight catalog observation to…
4ff8456
test(windows): give the async catalog enumeration a real oracle
d55bc92
test(windows): guard all three async wirings behind #1852
ca7923a
test(windows): make the #1852 oracles portable and timing-free
c035ee0
Merge pull request #1876 from lidge-jun/ingw/fix-windows-v2-catalog-b…
lidge-jun dbe2601
Merge pull request #2112 from Yuxin-Qiao/fix/issue-2106-codex-tool-mode
lidge-jun 135872d
fix(tools): recover the namespace when a custom_tool_call is replayed
e1ef794
fix(usage): mark an assumed OpenRouter priority cost as a lower bound
a5289aa
Merge pull request #1934 from jenfonro/fix/namespaced-custom-tool-alias
lidge-jun 4edf795
Merge pull request #2080 from olddonkey/codex/fastwire-b2-openrouter
lidge-jun 47e752a
refactor(types): move value clusters to types/tools and types/wire le…
lidge-jun 3ddae40
docs(devlog): WP1 plan + split-program risk assessment
lidge-jun da86a83
Merge pull request #2019 from lidge-jun/codex/split-wp1-types
lidge-jun a0f8c01
refactor(types): move type clusters to leaves; types.ts becomes a pur…
2235f45
Merge pull request #2023 from lidge-jun/codex/split-wp1b-type-clusters
lidge-jun ef6408d
refactor(config): extract provider-name leaf; break config<->profile …
lidge-jun 8853184
docs(devlog): WP2a-1 audited plan
lidge-jun eca18d0
Merge pull request #2036 from lidge-jun/codex/split-wp2a-config-names
lidge-jun dd07be5
docs(devlog): roadmap decade docs for the 260819 queue-drain loop
759e999
docs(devlog): fold audit corrections into the roadmap decade docs
95b98d9
docs(devlog): open the execution ledger with the wp0 audit outcome
58ceae3
docs(devlog): record the wp1 pre-merge review outcome and its adjudic…
8bfe087
docs(devlog): correct the modelRecordValue contract and record the fo…
67c787b
docs(devlog): close wp1 and wp4 in the execution ledger
6c359d6
docs(devlog): record the wp4 verdict comment ids
8024c84
docs(devlog): record wp1-wp4 outcomes in the execution ledger
c9894bb
docs(devlog): dedupe the ledger and record the rebased-head CI evidence
a2d4cb7
docs(devlog): close the queue-drain loop with the verified retarget s…
7290371
docs(devlog): record the R1 CI proof and the no-silent-loss audit
bf01d20
docs(devlog): close the 260819 queue-drain campaign with its outcome …
6b21bd8
docs(devlog): record the R3 decisions as posted, with comment links
11a6d98
docs(devlog): record the R4 verdicts as posted
bf3a7fe
docs(devlog): mark the roadmap executed and point at the ledger
c054d48
docs(devlog): roadmap for the split merge, bug queue, and dogfooding …
0ac3ba1
docs(devlog): open the merge-loop ledger with the wp1 re-review outcome
9eb1b75
docs(devlog): fold the wp1 re-audit corrections into the merge ledger
a77ee5d
docs(devlog): add the head-drift check the wp1 re-review earned
cc738c0
docs(devlog): record the wp2 batch merge with its red-drive evidence
914013e
docs(devlog): record the wp2 merges and the wp3 batch composition check
e4f0730
docs(devlog): record wp3 merges and the third stale-base proof
83306e1
docs(devlog): close wp3 with the 2031 rebase-to-green proof
1f06d4f
docs(devlog): record wp4 - one merged, two held with real blockers
9ba4d44
docs(devlog): record wp5 and wp6 composition
5343d9a
docs(devlog): record wp5 - the fix that traded a hang for a wrong answer
963f524
docs(devlog): record wp6 - three holds and what they cost the split plan
ce97e67
docs(devlog): record wp6 holds and the split-stack state entering wp7
b0c8620
docs(devlog): correct wp6 to the merged outcome with our two fixes
d697e25
fix(config): validate codexToolMode instead of passing it through
b84f8e5
docs(devlog): record the split-stack landing and the blocker that sur…
8f0c1e6
test(types): pin the split barrel to re-export identity, not copies
f788aff
docs(devlog): record that the hygiene-exception argument was wrong
7c23b5a
fix(service): bake outbound proxy env into installed service definitions
3fda507
docs(devlog): carry the unclaimed-bug selection unit onto the fix branch
d7caaa9
docs(devlog): record the 2107 implementation and its red-drive
0fc8d13
Merge pull request #2119 from lidge-jun/codex/merge-loop-closeout
lidge-jun df05a80
docs(devlog): close the merge loop with its outcome record
54afa93
docs(devlog): mark the roadmap executed and flag the unrun soak gate
e15d535
Merge pull request #2120 from lidge-jun/codex/merge-loop-outcome
lidge-jun 2d7b945
fix(service): build service definitions from an injected proxy env, n…
lidge-jun 85a5706
fix(tray): decode reg.exe output as console text, not UTF-8
4cb3631
docs(devlog): record the 1933 implementation and the vacuous test it …
163d7e5
docs(devlog): record the post-split rebase and which deferrals still …
b2f6ced
docs(devlog): record the 2114 disposition and why it is a comment not…
f5da1b2
fix(codex): name the native-main gate reason when the fence returns 503
lidge-jun 60526d7
fix(cursor): do not re-label a completed turn as failed when the stre…
50c6ccd
docs(devlog): record the 2108 phase-1 implementation and the header t…
lidge-jun b571284
docs(devlog): record the 1527 abort slice and the wrong-site edit the…
745f6f6
docs(devlog): record the CI proxy-env leak and the ablation that kill…
lidge-jun bdaf446
Merge pull request #2116 from lidge-jun/fix/service-proxy-env
lidge-jun c701cc7
Merge pull request #2117 from lidge-jun/fix/tray-registry-encoding
lidge-jun 239cae9
Merge pull request #2118 from lidge-jun/fix/cursor-abort-teardown
lidge-jun fbc6f26
Merge pull request #2121 from lidge-jun/fix/native-main-gate-reason
lidge-jun 163692a
fix(service): write service definitions owner-only, they can carry a …
lidge-jun 52f85f6
docs(devlog): record the final audit and the 0644 credential exposure…
lidge-jun 8e7b633
Merge pull request #2126 from lidge-jun/fix/service-definition-secret…
lidge-jun 49f0885
docs(devlog): close the unit with what shipped, what stayed open, and…
lidge-jun ceac592
Merge pull request #2128 from lidge-jun/docs/merge-outcome-260820
lidge-jun b6b219c
fix(probe): read the unit off disk when the session bus cannot answer
lidge-jun 7e95fc6
fix(probe): an unaskable WinSW query with no assets on disk is absence
lidge-jun e95b8cf
fix(codex): let an unknown ownership fence re-ask instead of holding …
lidge-jun 82fd810
fix(probe,codex): close the fail-open and the refcount bug an audit f…
lidge-jun 9d49763
fix(codex): let the fence pay for itself, so the probe cannot pay twice
lidge-jun a674b90
test(codex): pin the owner-identity guard on the reprobe hook
lidge-jun 50386c1
docs(devlog): record the fence fixes and the ownership model that was…
lidge-jun 890d339
Merge pull request #2130 from lidge-jun/fix/systemd-bus-unreachable-d…
lidge-jun 32529c2
chore(release): move dev's version line past the published channel
lidge-jun 360b66b
fix(service): fail closed on the Windows ACL when a definition holds …
lidge-jun 15527f8
test(service): use the repo URL-userinfo fixture so privacy:scan stay…
lidge-jun 8d828bd
Merge pull request #2136 from lidge-jun/chore/reconcile-dev-version
lidge-jun 75251bb
test(service): pin the file mode on POSIX only, not on Windows
lidge-jun cd8f9b8
Merge pull request #2139 from lidge-jun/fix/windows-mode-assertions
lidge-jun 4dfc2d6
fix(log-guard): accept the OS's own canonical spelling on Windows
lidge-jun d2f1dcc
test(composed): show the child's output when a start never publishes …
lidge-jun 512d1c7
test(composed): scale the WP13 start watchdogs to the CI floor
lidge-jun fe8fc6f
ci(windows): give the Windows shards the timeout every other leg alre…
lidge-jun cf5f91e
test(composed): put the CLI output in the restore-back assertion message
lidge-jun b7b34a9
fix(windows): widen the identity-lookup budget on CI runners only
lidge-jun 9e11d4f
test(composed): pass CI through to the CLI children
lidge-jun d19a2c9
fix(log-guard): make the Windows path widening link-aware
lidge-jun c055608
test(composed): stop a timed-out case from killing the next one
lidge-jun 2b2190f
test(composed): route the last two hardcoded budgets through the CI s…
lidge-jun 3fa4053
docs(devlog): record the Windows leg, and the pre-existing verdict th…
lidge-jun 5252744
Merge pull request #2143 from lidge-jun/fix/log-guard-windows-canonic…
lidge-jun 030818f
docs(devlog): record release readiness for 2.27.0 and the Windows gat…
lidge-jun 70e8bab
Merge pull request #2153 from lidge-jun/docs/windows-known-issues
lidge-jun 94ecc29
docs(devlog): record the local Windows verification behind the 2.27.0…
lidge-jun caf2035
Merge pull request #2158 from lidge-jun/codex/windows-verification-2270
lidge-jun 43256f7
merge main into dev for the 2.27.0 promotion
lidge-jun File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file added
BIN
+161 KB
...18_fastwire_b2_openrouter/evidence/010_logs_openrouter_priority_lower_bound.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 16 additions & 0 deletions
16
devlog/_plan/260818_fastwire_b2_openrouter/evidence/README.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,16 @@ | ||
| # Evidence — FastWire B2 (OpenRouter) | ||
|
|
||
| `010_logs_openrouter_priority_lower_bound.png` — Logs table with three seeded OpenRouter | ||
| requests on `openai/gpt-5.6-sol`, captured against a local proxy with a temporary | ||
| `OPENCODEX_HOME`: | ||
|
|
||
| | Row | Attempt outcome | Rendering | | ||
| | --- | --- | --- | | ||
| | `or-priority-confirmed` | upstream echoed `service_tier: "priority"` | `≥$0.1105` — priced at the standard rate but marked a floor, because OpenRouter publishes no bundled tier price and documents priority as higher cost | | ||
| | `or-priority-declined` | upstream echoed `service_tier: "default"` | `~$0.1105` — a real downgrade, so no floor marker | | ||
| | `or-standard` | no tier requested | `~$0.1105` | | ||
|
|
||
| All three totals match on purpose: without a bundled priority price every row is computed at | ||
| the standard rate, so the only thing that differs is whether the cost is presented as an | ||
| estimate (`~$`) or as a known lower bound (`≥$`). The marker matches the convention used by | ||
| the parallel xAI unit (#2072). |
104 changes: 104 additions & 0 deletions
104
devlog/_plan/260818_megafile_split_program/010_wp1_types_value_leaves.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,104 @@ | ||
| # WP1 — types.ts value-leaf extraction (stacked PR 1 of the split program) | ||
|
|
||
| Unit: devlog/_plan/260818_megafile_split_program. Risk basis: 000_risk_assessment.md. | ||
| Branch: codex/split-wp1-types on dev @ b04cd26e7 (post FastWire B0/B1 merge). | ||
| Class: C2 (mechanical move, shared-runtime file, full-suite gate). | ||
|
|
||
| ## Loop spec | ||
|
|
||
| - Archetype: pure-move refactor, zero behavior change. | ||
| - Trigger: split program WP1, lowest-risk opener. | ||
| - Goal: src/types.ts stops carrying runtime value code; values live in leaves; | ||
| every existing import keeps working via re-export. | ||
| - Non-goals: NO type-cluster split yet (OcxConfig/OcxProviderConfig stay), | ||
| NO consumer retargeting to leaf paths, NO behavior or signature change. | ||
| - Verifier: bun run typecheck && bun run test (full — shared runtime file). | ||
| - Stop: both green + core-lab-boundary green; PR opened against dev. | ||
| - Memory artifact: this doc + ledger attests. | ||
|
|
||
| ## Scope (IN) | ||
|
|
||
| Extract the two VALUE clusters from src/types.ts (1867 lines) into leaves: | ||
|
|
||
| 1. src/types/tools.ts — lines ~236-292: | ||
| namespacedToolName, toolChoiceAliases, toolAllowedByChoice, | ||
| resolveToolChoiceWireName, modelInList, OcxToolChoice (type), | ||
| isAllowedToolChoice, toolChoiceToolPredicate. | ||
| Needs `import type { OcxTool } from "../types"` — type-only, erased at | ||
| runtime, so the types.ts -> tools.ts re-export is NOT a runtime cycle. | ||
| 2. src/types/wire.ts — lines ~1760-1839: | ||
| UPSTREAM_HTTP_VERSION_VALUES, UpstreamHttpVersion, | ||
| REASONING_SUMMARY_DELIVERY_VALUES, ReasoningSummaryDelivery, | ||
| CodexAccountMode, OPENAI_PROVIDER_TIER_VERSION, | ||
| MODEL_ADAPTER_OVERRIDE_ALLOWED, ANTHROPIC_WIRE_MODELS (internal), | ||
| anthropicWireModelsForProvider (internal), captureWireAdapterHardPins, | ||
| isWirePinnedModel, pinnedWireAdapter. Self-contained, no imports. | ||
|
|
||
| src/types.ts keeps every current export via `export ... from "./types/..."`; | ||
| type-only names re-exported with `export type`. | ||
|
|
||
| ## Scope (OUT) | ||
|
|
||
| - All interface/type clusters stay in types.ts this PR. | ||
| - No import-path changes anywhere else in src/ or tests/. | ||
| - No lab imports anywhere new (types is on the protected graph as a value | ||
| import from responses/core.ts: modelInList, namespacedToolName). | ||
|
|
||
| ## File change map | ||
|
|
||
| - ADD src/types/tools.ts (~60 lines incl. docs) | ||
| - ADD src/types/wire.ts (~85 lines incl. docs) | ||
| - EDIT src/types.ts: delete moved bodies, add two re-export blocks at the | ||
| same positions; net -120 lines. | ||
|
|
||
| ## Accept criteria | ||
|
|
||
| 1. bun run typecheck exit 0. | ||
| 2. bun run test full suite: same pass count as base (13k+), 0 fail. | ||
| 3. tests/core-lab-boundary.test.ts green (covers the new static edges | ||
| types.ts -> types/tools.ts, types/wire.ts on the protected walk). | ||
| 4. rg confirms no consumer file changed: git diff --stat touches exactly 3 | ||
| files. | ||
| 5. Value identity preserved: MODEL_ADAPTER_OVERRIDE_ALLOWED still a single | ||
| ReadonlySet instance (only one declaration site, re-export not re-create). | ||
|
|
||
| Activation grounding: criterion 3's scenario is the existing boundary test | ||
| run; criterion 5's scenario is the full suite (service-tier tests compare | ||
| set membership through both import paths). | ||
|
|
||
| ## Verifier reality (PLAN-VERIFIER-REAL-01) | ||
|
|
||
| - bun run typecheck: exists in package.json, reads src/ via tsconfig | ||
| include ["src"] — observes both new files. To be run in C. | ||
| - bun run test: tests/ suite imports ../src/types in 400 files — observes | ||
| the barrel; core-lab-boundary walks the import graph from the three | ||
| protected roots which reach types.ts — observes the new edges. | ||
|
|
||
| ## Stacked-PR plan (DEV-STACK-01) | ||
|
|
||
| PR 1 (this): value leaves + barrel. Target: dev. | ||
| PR 2 (next cycle): type-cluster split (request/config/provider/accounts) | ||
| stacked on PR 1's head branch. | ||
| Later cycles per 000_risk_assessment.md order (config leaves, registry, ...). | ||
|
|
||
| ## Audit amendments (A-phase, 2 auditors: grok-4.6 NEAR-PASS / gpt-5.6-sol FAIL->fixed) | ||
|
|
||
| 1. CYCLE FIX (sol blocker): OcxTool (lines 211-232) moves INTO types/tools.ts. | ||
| tools.ts imports NOTHING from ../types — dependency is strictly one-way | ||
| (types.ts -> types/tools.ts). types.ts re-exports OcxTool as a type. | ||
| 2. RECIPE FIX (grok finding 7): `export type { X } from` does not BIND X in | ||
| the barrel. types.ts still uses OcxTool (line 106), OcxToolChoice (299), | ||
| UpstreamHttpVersion (1455), CodexAccountMode (1470), | ||
| ReasoningSummaryDelivery (1574) — so the barrel adds a local | ||
| `import type { OcxTool, OcxToolChoice } from "./types/tools"` and | ||
| `import type { UpstreamHttpVersion, ReasoningSummaryDelivery, | ||
| CodexAccountMode } from "./types/wire"` next to the Kiro import. | ||
| 3. OcxToolChoice + its guards travel with tools.ts (they are one cluster). | ||
| 4. Extensionless specifiers only (lab walker resolves `${base}.ts`). | ||
| 5. AC4 corrected: scope proof = `git diff --stat <base>..HEAD -- src tests` | ||
| showing exactly 3 src files; devlog/plan files are committed separately. | ||
| 6. AC5 proof corrected: identity is preserved by ESM re-export semantics | ||
| (single declaration site); drop the false 'both import paths' claim. | ||
| 7. Protected-roots note corrected: PROTECTED has 4 files; only | ||
| responses/core.ts puts types.ts on the runtime graph (core.ts:63). | ||
|
|
94 changes: 94 additions & 0 deletions
94
devlog/_plan/260818_megafile_split_program/020_wp1b_type_clusters.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,94 @@ | ||
| # WP1b — types.ts type-cluster split (stacked PR 2, layer 2 of the stack) | ||
|
|
||
| Stack (DEV-STACK-01/03): layer 1 = #2019 (codex/split-wp1-types, value leaves). | ||
| This layer: codex/split-wp1b-type-clusters, base = codex/split-wp1-types. | ||
| Thesis: src/types.ts becomes a pure barrel; all type clusters move to leaves. | ||
| Class: C2 pure-move, type-only (zero runtime code moves in this layer). | ||
|
|
||
| ## Loop spec | ||
|
|
||
| - Archetype: pure-move refactor, zero behavior change (type-only). | ||
| - Verifier: bun run typecheck + full bun run test on lidge (remote contract). | ||
| - Stop: green + PR opened with base codex/split-wp1-types + stack map in body. | ||
|
|
||
| ## Measured dependency structure (one-way, no cycles) | ||
|
|
||
| - request cluster (lines 6-368): needs KiroOAuthMetadata (oauth/types), | ||
| OcxTool + OcxToolChoice (types/tools). Nothing else external. | ||
| - config cluster (370-1180): needs OcxProviderConfig only (provider cluster). | ||
| - provider cluster (1183-1698): needs UpstreamHttpVersion x2, | ||
| ReasoningSummaryDelivery x3, CodexAccountMode x2 (types/wire). | ||
| - accounts cluster (1700-1729): self-contained. | ||
|
|
||
| ## File change map | ||
|
|
||
| - ADD src/types/request.ts <- lines 6-368 + import type {KiroOAuthMetadata} | ||
| from ../oauth/types, import type {OcxTool, OcxToolChoice} from ./tools | ||
| - ADD src/types/config.ts <- lines 370-1180 + import type | ||
| {OcxProviderConfig} from ./provider | ||
| - ADD src/types/provider.ts <- lines 1183-1698 + import type {...} from ./wire | ||
| - ADD src/types/accounts.ts <- lines 1700-1729, no imports | ||
| - EDIT src/types.ts -> pure barrel (~30 lines): export type blocks for the 4 | ||
| new leaves + existing tools/wire re-exports (values stay `export {}`, | ||
| types stay `export type {}`). KiroOAuthMetadata import dropped from barrel. | ||
|
|
||
| ## Accept criteria | ||
|
|
||
| 1. typecheck exit 0. 2. lidge full suite 0 fail (>= 13201 pass baseline). | ||
| 3. core-lab-boundary green (barrel value re-exports still walked; type-only | ||
| leaves are erased so runtime graph SHRINKS, never grows). | ||
| 4. Source diff: exactly 5 files under src/ (4 adds + barrel). | ||
| 5. Public surface byte-compatible: src/index.ts exports (OcxConfig, OcxContext, | ||
| OcxMessage, OcxParsedRequest, OcxProviderConfig, OcxRequestOptions, OcxTool, | ||
| AdapterEvent) all still resolve from ./types. | ||
|
|
||
| ## Risks | ||
|
|
||
| - `export type ... from` binds nothing locally (WP1 lesson) — but the new | ||
| barrel needs NO local bindings once all interfaces leave; only the 4 | ||
| import-type lines vanish too. Residual: none expected. | ||
| - interface merging/declaration duplication: each name must exist in exactly | ||
| one leaf; grep-verify no name appears in two files. | ||
| - Tests importing `import * as types from ../src/types` (namespace): type-only | ||
| namespaces erased; runtime namespace keeps the same value exports via | ||
| tools/wire re-exports. No test currently reads a VALUE that moves (nothing | ||
| moves at runtime this layer). | ||
|
|
||
|
|
||
| ## Audit amendments round 2 (grok-4.6 NEAR-PASS / sol FAIL -> both fixed) | ||
|
|
||
| CORRECTED extract ranges (file is 1727 lines): | ||
|
|
||
| - request.ts: lines 5-211 (incl. leading JSDoc) + 224-364 | ||
| + import type { KiroOAuthMetadata } from ../oauth/types | ||
| + import type { OcxTool, OcxToolChoice } from ./tools | ||
| + import type { TierDecision, TierObservationContext } from ./provider | ||
| (OcxRequestOptions.tierDecision:235 / tierObservation:237 — missed edge) | ||
| - config.ts: lines 366-1181 (incl. closing brace 1181) MINUS the | ||
| RefreshPolicy block (1074-1080, moves to provider — see below) | ||
| + import type { OcxProviderConfig, RefreshPolicy } is WRONG — instead: | ||
| + import type { OcxProviderConfig } from ./provider (604) | ||
| + import type { CodexAccount } from ./accounts (874 — missed edge) | ||
| - provider.ts: lines 1183-1687 + RefreshPolicy block (1074-1080; sole | ||
| consumer is OcxProviderConfig.refreshPolicy:1484 — relocation keeps the | ||
| graph one-way, avoids the config<->provider cycle) | ||
| + import type { UpstreamHttpVersion, ReasoningSummaryDelivery, | ||
| CodexAccountMode } from ./wire | ||
| + REWRITE 2 inline type-query paths (1659, 1665): | ||
| import("./adapters/cursor/...") -> import("../adapters/cursor/...") | ||
| - accounts.ts: lines 1700-1727, no imports | ||
| - BARREL KEEPS lines 213-222 (tools value re-exports) and 1689-1698 (wire | ||
| value re-exports): RUNTIME blocks, must NOT enter type-only leaves. | ||
| Final barrel = 2 value blocks + 4 export type blocks, named re-exports | ||
| only, NO export * (would duplicate runtime names). | ||
| - The 3 import type lines at 1-3 vanish with their consumers. | ||
| - Barrel needs RefreshPolicy re-exported from ./provider (was ./config). | ||
|
|
||
| Corrected one-way graph: request -> {oauth, tools, provider}; | ||
| config -> {provider, accounts}; provider -> wire; accounts -> none. | ||
|
|
||
| Both auditors confirmed: no namespace imports, no runtime dynamic import of | ||
| types.ts (all import("...types").X hits are erased type queries), no textual | ||
| test pins, lab walker unaffected while value blocks stay in barrel, | ||
| src/index.ts keeps resolving. AC4 corrected: 5 files under src. | ||
|
|
||
62 changes: 62 additions & 0 deletions
62
devlog/_plan/260818_megafile_split_program/030_wp2a_provider_name_leaf.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,62 @@ | ||
| # WP2a-1 — config provider-name leaf (cycle breaker; parallel PR off dev) | ||
|
|
||
| Branch codex/split-wp2a-config-names on dev@aaf04690e. NOT stacked on the | ||
| types stack (disjoint files, DEV-STACK-01 'independent parts -> parallel PRs'). | ||
| Class C2 pure move + 2 consumer retargets. Risk basis 000_risk_assessment.md | ||
| WP2a; highest-leverage low-risk config extraction: breaks the existing | ||
| config <-> routing/profile import cycle. | ||
|
|
||
| ## Loop spec | ||
|
|
||
| - Goal: isValidProviderName/hasOwnProvider live in a leaf with no heavy deps; | ||
| routing/profile.ts and router.ts stop importing them through the 3900-line | ||
| config barrel (which loads Zod + bun:sqlite + registry transitively). | ||
| - Non-goals: no other config extraction this PR; management write-path | ||
| callers keep importing from ./config (barrel re-export). | ||
| - Verifier: typecheck + lidge full suite + core-lab-boundary. | ||
|
|
||
| ## File change map | ||
|
|
||
| - ADD src/config/provider-name.ts: RESERVED_PROVIDER_NAMES, | ||
| PROVIDER_NAME_PATTERN (both module-private consts, config.ts 738-750), | ||
| isValidProviderName (762), hasOwnProvider (769). Zero imports. | ||
| - EDIT src/config.ts: delete moved bodies; add | ||
| `export { isValidProviderName, hasOwnProvider } from "./config/provider-name"`; | ||
| internal call sites (1150, 1390, 1597 + others) need a local | ||
| `import { ... } from "./config/provider-name"` since re-export binds nothing | ||
| (WP1 lesson). | ||
| - EDIT src/routing/profile.ts:16: import hasOwnProvider from | ||
| ../config/provider-name (cycle edge profile->config removed). | ||
| - EDIT src/router.ts:11: split import — hasOwnProvider from | ||
| ./config/provider-name, resolveEnvValue stays from ./config. | ||
|
|
||
| ## Accept criteria | ||
|
|
||
| 1. typecheck exit 0. 2. lidge full suite 0 fail (baseline 13201 pass). | ||
| 3. core-lab-boundary green (router edge now reaches a leaf with no imports — | ||
| protected graph shrinks). | ||
| 4. rg 'from "../config"' src/routing/profile.ts -> no hasOwnProvider import | ||
| through the barrel (cycle gone; remaining profile imports from config: none | ||
| expected — verify, else keep others intact). | ||
| 5. Source diff: exactly 4 files under src/. | ||
|
|
||
| ## Risks | ||
|
|
||
| - config.ts superRefine calls isValidProviderName internally — the local | ||
| import must land before schema evaluation (top of file, hoisted; ESM fine). | ||
| - routing/profile.ts may import more than hasOwnProvider from ../config — | ||
| verify and leave other names on the barrel. | ||
|
|
||
|
|
||
| ## Audit amendments (grok PASS / sol NEAR-PASS) | ||
|
|
||
| - Internal call sites are EXACTLY 3 (1150, 1390 isValidProviderName; 1597 | ||
| hasOwnProvider), all inside superRefine callbacks — no TDZ risk. | ||
| - AC3 claim corrected: the protected graph does NOT shrink (router keeps the | ||
| barrel edge for resolveEnvValue; the leaf adds one dead-end module). The | ||
| real win is the config<->profile cycle break. core-lab-boundary stays | ||
| green either way. | ||
| - profile.ts imports nothing else from ../config — cycle fully gone. | ||
| - Tests importing isValidProviderName via barrel: config.test.ts:13, | ||
| policy-execution.test.ts:6 — barrel re-export preserves both. | ||
|
|
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Split the first two acceptance criteria into separate list items.
Markdown renders criteria 1 and 2 as one item at both sites. This makes criterion 2 less visible and causes the subsequent numbering warnings.
devlog/_plan/260818_megafile_split_program/020_wp1b_type_clusters.md#L37-L43: Put criterion 2 on its own line after criterion 1.devlog/_plan/260818_megafile_split_program/030_wp2a_provider_name_leaf.md#L35-L41: Put criterion 2 on its own line after criterion 1.🧰 Tools
🪛 markdownlint-cli2 (0.23.2)
[warning] 38-38: Ordered list item prefix
Expected: 2; Actual: 3; Style: 1/2/3
(MD029, ol-prefix)
[warning] 40-40: Ordered list item prefix
Expected: 3; Actual: 4; Style: 1/2/3
(MD029, ol-prefix)
[warning] 41-41: Ordered list item prefix
Expected: 4; Actual: 5; Style: 1/2/3
(MD029, ol-prefix)
📍 Affects 2 files
devlog/_plan/260818_megafile_split_program/020_wp1b_type_clusters.md#L37-L43(this comment)devlog/_plan/260818_megafile_split_program/030_wp2a_provider_name_leaf.md#L35-L41🤖 Prompt for AI Agents
Source: Linters/SAST tools