Repository navigation
fix(skills): stop ambient env leaking into generated SKILL.md output - #15948
Conversation
…nference#14381 `check:agent-skills-sync` has been failing on the release/v3.8.52 tip, reporting 20 drifted skills. It blocks every PR into the branch: the `Merge integrity (changelog + generated skills)` job is named in .mergify.yml as the always-on anchor that must be an affirmative success. Root cause: cheaper-inference#14381 (4df9cea) extracted the curl examples out of generator.ts into apiOperationExample.ts and swapped the hardcoded `https://localhost:20128` for `resolveOmniRouteBaseUrl()`, whose default is `http://localhost:20128`. The committed SKILL.md files were never regenerated, so every generated example has disagreed with the generator since that commit. This is the mechanical output of `node --import tsx/esm scripts/skills/generate-agent-skills.mjs --apply` with no base-url env vars set, i.e. the documented default — the same environment CI runs in. No hand edits, no instruction text touched. The gate goes 20 drifted -> 0.
The curl-example builders called resolveOmniRouteBaseUrl(), which reads process.env. Their only consumer is the SKILL.md generator, whose output is committed and then diff-gated by check:agent-skills-sync — so the committed artifact was a function of whoever last ran the generator. Anyone with PORT, API_PORT, DASHBOARD_PORT, BASE_URL or OMNIROUTE_BASE_URL set wrote their own host into the files, and CI, which sets none of them, reported drift. That is the trap that left all 20 skills drifted and blocked every PR into the branch (the Merge integrity job is .mergify.yml's always-on merge anchor). baseUrl is now an explicit argument defaulting to DEFAULT_OMNIROUTE_BASE_URL, so regeneration is reproducible on any machine. cheaper-inference#15778's capability is preserved, not dropped: a caller that wants the operator's configured host passes resolveOmniRouteBaseUrl() as that argument, and its test now asserts exactly that. What changes is that it must be asked for rather than picked up from the environment. Verified byte-identical to the regenerated output in cheaper-inference#15945, so the two land in either order without conflict. The determinism test was confirmed RED against the previous code ('env {"PORT":"37128"} leaked into the example') before the fix was restored. 5/5 in the contract suite, 30/30 across agentSkills-generator and cli-api-generator-ref-params, typecheck and lint 0.
…ossary, route map, ToS-default test fallout (#16092) Validated on the branch: 94/94 node tests across the touched files + glossary/route-map gates, the 4 vitest files 20/20 run individually, API typecheck and eslint clean. Remaining tip reds owned elsewhere: executor golden (#16058), quality-rail (#15682), chaosVirtualCombo (#16090), skills sync (#15945/#15948).
…ontracts Refresh against the current release base, preserve canonical generator defaults and explicit host support, and remove an inaccurate reference to a generator CLI flag. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
… metadata docs Preserve the original generated-skills contribution and merge release base 7510677. Regenerate the owner-approved PUT /api/provider-models reference from canonical inputs. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
|
Hi @BenjaminAronsson — closing this pull request to clear the open queue. The branch |
Retain contributor history and current release changes. Additional new-base generated instruction changes remain preview-only until separately approved. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
|
Owner has explicitly requested reopening and merging the campaign PRs. This PR was already reopened when checked. The relay-15948 reconciliation worktree belongs to another session, so this campaign will not overwrite or merge over that session. A fresh read-only VPS probe on generated-output candidate 6718424 confirms the independent determinism defect: PORT=37128 makes sync exit 2 (19 stale / 27 unchanged). This PR remains necessary unless a new current-base execution proves supersession. Fresh required checks are pending; no inherited failure or pending result is being treated as PASS. |
Preserve deterministic examples and contributor history while refreshing the exact release base and correcting the changelog fragment format. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
Merge release base 7a0bb87 without losing contributor work or release changes. Focused generator and consumer tests pass 33/33 with matching-lock dependencies. Two additional instruction hunks remain preview-only pending explicit approval. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
|
Reopened at the repository owner's explicit request, retaining the original contribution. Thank you @BenjaminAronsson for fixing environment-dependent generated examples. Normal fast-forward update: head With dependencies matching the current lock: exact-base-helper RED 3 PASS / 2 FAIL; restored fix GREEN 35 PASS across the contract, skill-generator and CLI-reference-parameter suites. Focused lint, final format, test-masking, changelog, typecheck:core and normal hooks exit 0. The physical cache is from a completed clean npm ci; no separate clean install per worktree is claimed. Admission remains HOLD until current-candidate applicable CI succeeds and the separately owned generated-content repair #15945 lands. This PR intentionally does not copy that contribution: its standalone generator still reports 20 pending / 26 unchanged / zero errors. No merge, bypass, force push or baseline increase occurred. |
Regenerate the two explicitly approved instruction hunks with the canonical generator. Neutral full dry-run reports 0 pending, 46 unchanged and 0 errors; focused generator and consumer tests pass 33/33. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
|
Delivery reconciliation — 2026-10-13 Thank you @BenjaminAronsson and @woodsonl for the selected fixes. The repository owner has explicitly authorized merging the original PRs #15945, #15948 and #15682, including the previously reviewed generated instruction hunks. That approval remains settled; no replacement PR or contributor-branch overwrite is planned. Reconciled the current release base Current scoped results: 96/96 focused native tests PASS, typecheck:core PASS, canonical neutral skill generator 0 pending / 46 unchanged / 0 errors, changelog integrity PASS. These are focused interaction receipts, not a full CI certificate or admission for different intermediate squash trees. The earlier pending-workflow snapshot has been superseded by terminal results. #15945's Gate / Quality passed, but Gate / CI failed on Docs Sync (Strict); #15948 and #15682 also have failed required lanes. Reproduced the blocking i18n checker on both the exact pure base and the selected interaction candidate: each exits 1, 27 drifted sources / 132 drifted targets, with identical affected path sets. The 264 separately reported stale targets are advisory, not the blocking count. The selected contribution clears generated-skill drift, not this global translation drift. The retained full Release-Green report for exact base Integration remains HOLD on required validation, not on owner approval. A separate base-repair scope has been raised with the owner. No admin merge, force push, gate/hash/baseline bypass, release or deploy was performed. Original PRs remain open and contributor credit is preserved. |
|
The repository owner explicitly transferred #15945/#15948 to this Video Bridge campaign on 2026-10-13 and requested completion. I am assuming coordination, preserving the published b9b3c20 head and the original contribution. Prior relay worktrees remain untouched. Fresh .15 checks will distinguish current candidate failures from current release-base defects; merge remains conditional on all applicable required gates, not the older focused receipts. |
No content changes. Refresh the original PR against the current release merge candidate after cheaper-inference#15840 restored translation synchronization. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
No content changes. Re-evaluate the original contributor PR against the current release merge candidate. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
Preserve the original contribution and current generated outputs. The candidate delta against release 2c06e3c is only the existing changelog fragment. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
Retain original contributor changes and the refreshed cheaper-inference#15945 dependency; validate this exact candidate without reusing old failing or passing checks. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
Reconcile release 7f1be3b while preserving the original generator changes. Cover NEXT_PUBLIC_BASE_URL isolation and restoration after reproducing the environment-sensitive failure. Clean dependency install, 51 focused tests, canonical generation under ambient overrides and core typecheck passed. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
|
Thanks @BenjaminAronsson. Your original PR has been reconciled with release Review found one additional test-isolation defect: Validation of this reconciliation:
These are scoped current-candidate receipts, not full merge/release acceptance. Required hosted CI/Quality and all applicable remaining lanes must still pass for the actual candidate. The generated sync-pull example remains separately tracked in #15945. No queue label, merge, PR closure, bypass, paid operation or deployment was performed. |
Preserve release ad37e8f and explicit URL inputs. Focused tests: 51/51 under ambient NEXT_PUBLIC_BASE_URL. Full generation under ambient host and port overrides: Generated 0, Unchanged 46. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
Relay continuation — scoped reconciliation, not merge acceptanceThanks Benjamin. Reconciled this original PR with pinned release 51/51 focused tests PASS under ambient NEXT_PUBLIC_BASE_URL; full catalog Generated 0 / Unchanged 46 with ambient host/port overrides. Explicit configured URLs and runtime resolver behavior remain preserved. Node 24.20.0 / npm 11.15.0; unchanged lockfile SHA-256 |
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
6e1ff7d
into
cheaper-inference:release/v3.8.52
Current checkpoint — 2026-10-17
Head:
f59763c185395a5a4be88bcc58d565b2ac5bb87d; reconciled base:906fb59a05ee28607dfe4a31a7764125df53fdef. The live release subsequently advanced to7ff5f6e9b6af688ce0f9e4ccbcb51e3abc845d97; these are scoped receipts, not acceptance of a newer combined candidate.The current net scope keeps generated examples deterministic across six ambient URL variables (including NEXT_PUBLIC_BASE_URL), retains explicit caller-selected hosts, and adds no published-skill changes. Base PR #16890 already fixes the two stale generated references previously reported below.
Original contributor history, Benjamin's authorship and the human maintainer's co-authorship are preserved. The original fork branch was updated by a verified fast-forward, without force. Independent Standards and Spec reviews found zero issues at this exact head. No operational skill was changed.
VPS .15 exact-head scoped checks, 04:23:21–04:24:32 UTC:
check:docs-allFAIL:endpoint /api/balance not found in src/app/api/indocs/reference/ENVIRONMENT.md.Admission: HOLD for the documentation repair, unresolved strict docs i18n, all applicable required current-candidate checks, and fresh base/freeze readback. Preserve the reviewed #15945 → #15948 order. Inherited failure is not a merge exemption; no merge/deploy is represented here.
Earlier checkpoints and original description (historical, not current-head acceptance)
Current checkpoint — 2026-10-16
Head:
e012a91ba65e3aa2d288054f3532b12723457ac3; reconciled base:8526008921e232eda3ede6bc67c2985f411a9831. Original contributor history and Benjamin's authorship are preserved; no force push. The misplaced #15945 changelog fragment was removed only from this PR and remains in #15945.VPS .15 exact-head scoped checks, 21:29:00–21:29:43 UTC:
The overall receipt is FAIL, not release acceptance. Preserve order #15945 then #15948, refresh the live base, and require all applicable gates; inherited failure is not a merge exemption. Historical 20-file and five-variable descriptions below do not certify the new head.
Historical description and previous evidence (not current-head acceptance)
Summary
SKILL.mdgenerator's output a pure function of its inputs. fix(skills): regenerate the 20 SKILL.md files drifted since #14381 #15945 regenerates the 20 drifted files; this PR stops them drifting again.apiOperationExample.ts/cliConfigurationExample.tscalledresolveOmniRouteBaseUrl(), which readsprocess.env. Their only consumer is the generator, whose output is committed and then diff-gated bycheck:agent-skills-sync— so the committed artifact was a function of whoever last ran the generator. Anyone withPORT,API_PORT,DASHBOARD_PORT,BASE_URLorOMNIROUTE_BASE_URLset baked their own host into the repo; CI, which sets none of them, then reported drift. BecauseMerge integrityis.mergify.yml's always-on merge anchor, that drift blocked every PR into the branch.baseUrlis now an explicit argument defaulting toDEFAULT_OMNIROUTE_BASE_URL, so regeneration is reproducible on any machine.resolveOmniRouteBaseUrl()as that argument. What changes is that it must be asked for rather than picked up from the ambient environment.Related Issues
Validation
src/lib/agentSkills/**), no request-path or DB codenpm run lint— exit 0release/v3.8.52tip (61e07fb7e0); focused checks rerun afterwardtests/unit/cli-configuration-consumer-contract.test.tsagentSkills-generator+cli-api-generator-ref-paramstypecheck:corenpm run lintgit diffempty)TDD record (Hard Rule #18). The new determinism test was confirmed RED against the previous code before the fix was restored:
Tests Added Or Updated
tests/unit/cli-configuration-consumer-contract.test.ts(updated) — three changes:generated examples ignore ambient base-url env so committed output is reproducible— asserts the default output is identical across all five env vars (PORT,API_PORT,DASHBOARD_PORT,BASE_URL,OMNIROUTE_BASE_URL). This is the regression guard, and the one confirmed red above.configuration-API examples are reproducible and still accept an explicit host— pins the/api/cli-tools/*branch, which routes throughcliConfigurationExample.ts, on both paths.configuration examples track the configured loopback port…→…when given one. Same assertion (http://localhost:37128, no20128), now via the explicit argument, so fix(docs): resolve generated skill curl examples to the configured loopback port #15778's behaviour stays covered rather than being silently dropped.withBaseUrlEnv()helper so each test restores all five vars in afinally, replacing the previous three-variable save/restore block.Coverage Notes
src/lib/agentSkills/apiOperationExample.tsandsrc/lib/agentSkills/cliConfigurationExample.ts. Both are fully exercised bycli-configuration-consumer-contract.test.ts, which covers every branch: bearer, dashboard-session (login / mutation / read), and the two/api/cli-tools/*paths — each now on both the default and explicit-baseUrlpaths, so the new parameter adds covered branches rather than uncovered ones.process.envreads.Reviewer Notes
skills/changes — content is fix(skills): regenerate the 20 SKILL.md files drifted since #14381 #15945's, the trap is this one's — so its ownMerge integrityrun still shows the inherited 20-skill drift until fix(skills): regenerate the 20 SKILL.md files drifted since #14381 #15945 lands.resolveOmniRouteBaseUrl()callers (A2A skills, MCPinternalFetch, two API routes). Those are genuine runtime consumers where reading the environment is correct.