chore: migrate lint/format stack to OXC#841
Conversation
📝 WalkthroughWalkthroughThis PR introduces OXC tooling integration for TypeScript/JavaScript code quality (linting and formatting), rebrands the product name from "CLIProxyAPI++" to "cliproxyapi-plusplus" across documentation, restructures VitePress navigation via a flat array-based sidebar format, adds new DevOps helper scripts for repository operations, and expands CI/CD workflows to include pre-build OXC validation checks. Changes
Estimated Code Review Effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly Related PRs
Suggested Labels
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request modernizes the project's code quality tooling by transitioning from a mixed set of linters and formatters to a unified OXC-based stack. This change aims to standardize code style, improve performance, and simplify the configuration overhead for maintaining consistent code quality across the repository. Highlights
Changelog
Ignored Files
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Pull request overview
Migrates lint/format tooling wiring to the OXC stack and updates CI to run the new lint/format gates, while removing legacy Spec Kitty mission/templates/scripts surfaces that are no longer needed in-repo.
Changes:
- Added Bun-based OXC lint + format checks to docs-related GitHub Actions workflows.
- Expanded workflow path filters to rerun CI when OXC config / Bun lockfiles change.
- Removed a large set of legacy
.kittify/mission templates/scripts and editor/agent prompt files.
Reviewed changes
Copilot reviewed 103 out of 128 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| .kittify/scripts/tasks/task_helpers.py | Removed legacy task helper shim module. |
| .kittify/scripts/tasks/acceptance_support.py | Removed legacy standalone acceptance workflow entrypoint. |
| .kittify/scripts/debug-dashboard-scan.py | Removed debug script for dashboard scanning. |
| .kittify/missions/software-dev/templates/tasks-template.md | Removed legacy software-dev tasks template. |
| .kittify/missions/software-dev/templates/task-prompt-template.md | Removed legacy software-dev task prompt template. |
| .kittify/missions/software-dev/templates/spec-template.md | Removed legacy software-dev spec template. |
| .kittify/missions/software-dev/templates/plan-template.md | Removed legacy software-dev plan template. |
| .kittify/missions/software-dev/mission.yaml | Removed legacy software-dev mission definition. |
| .kittify/missions/software-dev/command-templates/review.md | Removed legacy software-dev review command template. |
| .kittify/missions/software-dev/command-templates/plan.md | Removed legacy software-dev plan command template. |
| .kittify/missions/software-dev/command-templates/implement.md | Removed legacy software-dev implement command template. |
| .kittify/missions/software-dev/command-templates/dashboard.md | Removed legacy software-dev dashboard command template. |
| .kittify/missions/software-dev/command-templates/clarify.md | Removed legacy software-dev clarify command template. |
| .kittify/missions/software-dev/command-templates/analyze.md | Removed legacy software-dev analyze command template. |
| .kittify/missions/software-dev/command-templates/accept.md | Removed legacy software-dev accept command template. |
| .kittify/missions/research/templates/tasks-template.md | Removed legacy research tasks template. |
| .kittify/missions/research/templates/task-prompt-template.md | Removed legacy research task prompt template. |
| .kittify/missions/research/templates/spec-template.md | Removed legacy research spec template. |
| .kittify/missions/research/templates/research/source-register.csv | Removed legacy research source register template. |
| .kittify/missions/research/templates/research/evidence-log.csv | Removed legacy research evidence log template. |
| .kittify/missions/research/templates/research-template.md | Removed legacy research decision log template. |
| .kittify/missions/research/templates/plan-template.md | Removed legacy research plan template. |
| .kittify/missions/research/templates/data-model-template.md | Removed legacy research data model template. |
| .kittify/missions/research/mission.yaml | Removed legacy research mission definition. |
| .kittify/missions/research/command-templates/tasks.md | Removed legacy research tasks command template. |
| .kittify/missions/research/command-templates/specify.md | Removed legacy research specify command template. |
| .kittify/missions/research/command-templates/review.md | Removed legacy research review command template. |
| .kittify/missions/research/command-templates/plan.md | Removed legacy research plan command template. |
| .kittify/missions/research/command-templates/implement.md | Removed legacy research implement command template. |
| .kittify/missions/documentation/templates/tasks-template.md | Removed legacy documentation tasks template. |
| .kittify/missions/documentation/templates/task-prompt-template.md | Removed legacy documentation task prompt template. |
| .kittify/missions/documentation/templates/spec-template.md | Removed legacy documentation spec template. |
| .kittify/missions/documentation/templates/release-template.md | Removed legacy documentation release template. |
| .kittify/missions/documentation/templates/generators/sphinx-conf.py.template | Removed legacy Sphinx generator template. |
| .kittify/missions/documentation/templates/generators/jsdoc.json.template | Removed legacy JSDoc generator template. |
| .kittify/missions/documentation/templates/divio/tutorial-template.md | Removed legacy Divio tutorial template. |
| .kittify/missions/documentation/templates/divio/reference-template.md | Removed legacy Divio reference template. |
| .kittify/missions/documentation/templates/divio/howto-template.md | Removed legacy Divio how-to template. |
| .kittify/missions/documentation/templates/divio/explanation-template.md | Removed legacy Divio explanation template. |
| .kittify/missions/documentation/mission.yaml | Removed legacy documentation mission definition. |
| .kittify/missions/documentation/command-templates/tasks.md | Removed legacy documentation tasks command template. |
| .kittify/missions/documentation/command-templates/specify.md | Removed legacy documentation specify command template. |
| .kittify/metadata.yaml | Removed Spec Kitty repo metadata file. |
| .kittify/.dashboard | Removed local dashboard state file. |
| .kilocode/workflows/spec-kitty.status.md | Removed legacy KiloCode workflow doc (status). |
| .kilocode/workflows/spec-kitty.review.md | Removed legacy KiloCode workflow doc (review). |
| .kilocode/workflows/spec-kitty.research.md | Removed legacy KiloCode workflow doc (research). |
| .kilocode/workflows/spec-kitty.plan.md | Removed legacy KiloCode workflow doc (plan). |
| .kilocode/workflows/spec-kitty.implement.md | Removed legacy KiloCode workflow doc (implement). |
| .kilocode/workflows/spec-kitty.dashboard.md | Removed legacy KiloCode workflow doc (dashboard). |
| .kilocode/workflows/spec-kitty.clarify.md | Removed legacy KiloCode workflow doc (clarify). |
| .kilocode/workflows/spec-kitty.analyze.md | Removed legacy KiloCode workflow doc (analyze). |
| .kilocode/workflows/spec-kitty.accept.md | Removed legacy KiloCode workflow doc (accept). |
| .github/workflows/vitepress-pages.yml | Runs OXC lint/format checks in docs CI via Bun; updates path filters. |
| .github/workflows/docs.yml | Runs OXC lint/format checks in docs CI via Bun; updates path filters. |
| .github/prompts/spec-kitty.status.prompt.md | Removed legacy GitHub prompt file (status). |
| .github/prompts/spec-kitty.review.prompt.md | Removed legacy GitHub prompt file (review). |
| .github/prompts/spec-kitty.research.prompt.md | Removed legacy GitHub prompt file (research). |
| .github/prompts/spec-kitty.plan.prompt.md | Removed legacy GitHub prompt file (plan). |
| .github/prompts/spec-kitty.implement.prompt.md | Removed legacy GitHub prompt file (implement). |
| .github/prompts/spec-kitty.dashboard.prompt.md | Removed legacy GitHub prompt file (dashboard). |
| .github/prompts/spec-kitty.clarify.prompt.md | Removed legacy GitHub prompt file (clarify). |
| .github/prompts/spec-kitty.analyze.prompt.md | Removed legacy GitHub prompt file (analyze). |
| .github/prompts/spec-kitty.accept.prompt.md | Removed legacy GitHub prompt file (accept). |
| .github/copilot-instructions.md | Removed legacy GitHub Copilot instructions file. |
| .cursorignore | Removed Cursor ignore rules. |
| .cursor/commands/spec-kitty.status.md | Removed legacy Cursor command doc (status). |
| .cursor/commands/spec-kitty.review.md | Removed legacy Cursor command doc (review). |
| .cursor/commands/spec-kitty.research.md | Removed legacy Cursor command doc (research). |
| .cursor/commands/spec-kitty.plan.md | Removed legacy Cursor command doc (plan). |
| .cursor/commands/spec-kitty.implement.md | Removed legacy Cursor command doc (implement). |
| .cursor/commands/spec-kitty.dashboard.md | Removed legacy Cursor command doc (dashboard). |
| .cursor/commands/spec-kitty.clarify.md | Removed legacy Cursor command doc (clarify). |
| .cursor/commands/spec-kitty.analyze.md | Removed legacy Cursor command doc (analyze). |
| .cursor/commands/spec-kitty.accept.md | Removed legacy Cursor command doc (accept). |
| .claudeignore | Removed Claude ignore rules. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| - name: Setup Bun | ||
| uses: oven-sh/setup-bun@v2 | ||
| with: | ||
| bun-version: latest | ||
|
|
||
| - name: Install OXC dependencies | ||
| run: bun install --frozen-lockfile | ||
|
|
||
| - name: Lint docs TS/JS with OXC | ||
| run: bun run lint | ||
|
|
||
| - name: Check docs TS/JS formatting with OXC | ||
| run: bun run format:check | ||
|
|
||
| - name: Install dependencies | ||
| working-directory: docs | ||
| run: npm install --frozen-lockfile |
There was a problem hiding this comment.
The workflow installs dependencies twice (Bun at repo root, then npm under docs/). This is likely to add substantial CI time and can lead to confusing “which node_modules is active?” behavior. Consider consolidating onto a single package manager for docs CI (either run the Bun steps in working-directory: docs if the scripts live there, or drop the separate npm install if Bun is meant to drive the docs install/build).
| - name: Setup Bun | ||
| uses: oven-sh/setup-bun@v2 | ||
| with: | ||
| bun-version: latest | ||
|
|
||
| - name: Install OXC dependencies | ||
| run: bun install --frozen-lockfile | ||
|
|
||
| - name: Lint docs TS/JS with OXC | ||
| run: bun run lint | ||
|
|
||
| - name: Check docs TS/JS formatting with OXC | ||
| run: bun run format:check |
There was a problem hiding this comment.
Using bun-version: latest makes CI non-reproducible and can cause unexpected breakages when Bun releases. Pin to a known-good Bun version (and bump intentionally) to keep lint/format gates stable.
| - name: Setup Bun | ||
| uses: oven-sh/setup-bun@v2 |
There was a problem hiding this comment.
Bun installs can be slow without caching. Consider enabling Bun caching (supported by oven-sh/setup-bun in many setups) or adding an explicit actions/cache entry for Bun’s package cache / node_modules (whichever matches your intended install location) to reduce repeated install time across runs.
| - name: Setup Bun | ||
| uses: oven-sh/setup-bun@v2 | ||
| with: | ||
| bun-version: latest |
There was a problem hiding this comment.
Bun installs can be slow without caching. Consider enabling Bun caching (supported by oven-sh/setup-bun in many setups) or adding an explicit actions/cache entry for Bun’s package cache / node_modules (whichever matches your intended install location) to reduce repeated install time across runs.
| bun-version: latest | |
| bun-version: latest | |
| cache: true | |
| cache-dependency-path: bun.lock |
There was a problem hiding this comment.
Code Review
This pull request updates the .gitignore file to exclude various directories and files generated by AI tools and development environments. My review focuses on the new entries added. I've found a small redundancy that can be cleaned up for better maintainability.
Note: Security Review has been skipped due to the limited scope of the PR.
| .kittify/.dashboard | ||
|
|
|
@coderabbitai full review Automated retrigger: CodeRabbit state=FAILURE, age=25.7m (stale after 20m). |
Co-authored-by: Codex <noreply@openai.com>
Add shared devops checker/push wrappers and task targets for cliproxyapi++. Add VitePress Ops page describing shared CI/CD behavior and sibling references. Co-authored-by: Codex <noreply@openai.com>
Standardize README, CONTRIBUTING, and docs/help text branding to cliproxyapi-plusplus for consistent project naming. Co-authored-by: Codex <noreply@openai.com>
Replace Biome/Prettier/ESLint surfaces with oxlint, oxfmt, and tsgolint configs and workflow wiring. Co-authored-by: Codex <noreply@openai.com>
8c150a1 to
5651fb4
Compare
There was a problem hiding this comment.
Actionable comments posted: 14
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
docs/OPTIMIZATION_PLAN_2026-02-23.md (1)
1-43: 🛠️ Refactor suggestion | 🟠 MajorConsolidate this date-stamped plan into a canonical operations doc.
This file is session-style and time-bound; it should be merged into a single maintained optimization/operations page and then removed to prevent documentation drift.
As per coding guidelines, "Consolidate overlapping documentation aggressively; merge related session docs and remove orphaned or outdated markdown files."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/OPTIMIZATION_PLAN_2026-02-23.md` around lines 1 - 43, This dated optimization plan (docs/OPTIMIZATION_PLAN_2026-02-23.md) should be folded into the canonical operations/optimization document: copy the actionable items under Tracks 1–4 and the Architecture Outcome into the maintained optimization/operations page (e.g., docs/ARCHITECTURE.md or a dedicated docs/OPERATIONS_OPTIMIZATION.md), normalize wording to present-state (remove session timestamps), add links to relevant code locations (pkg/llmproxy/executor/ and note removal of pkg/llmproxy/runtime/executor/), update targets (lint/test/task commands like task quality and task test), and then delete the session file to avoid drift; ensure the merged doc contains an index/navigation entry and a short changelog note referencing the consolidation.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.github/workflows/docs.yml:
- Around line 61-63: Replace the incorrect npm flag in the GitHub Actions job
step named "Install dependencies": change the run command from "npm install
--frozen-lockfile" to "npm ci" so the workflow uses the proper CI-safe install
that respects the lockfile and fails if it is out of sync.
In @.gitignore:
- Around line 73-77: Remove the redundant .gitignore entry `.kittify/.dashboard`
because the existing `.kittify/` rule already ignores the entire directory;
delete the specific `.kittify/.dashboard` line and keep the broader `.kittify/`
entry to simplify and avoid duplication.
In `@CONTRIBUTING.md`:
- Line 29: The "Core logic improvements" guideline currently points to the same
repository as the provider path, making the "mainline project first" instruction
ambiguous; update the "**Core logic improvements**" line to either replace the
URL with the actual mainline repository URL (the intended target) or reword the
sentence to remove the duplicate link and clearly state the intended workflow
(e.g., "Propose core-logic changes to the mainline project first" with the
correct mainline URL or "Propose core-logic changes to the mainline project
first; provider-specific changes may be submitted here"). Ensure you edit the
exact "**Core logic improvements**" paragraph so the guidance is unambiguous.
In `@docs/.vitepress/config.ts`:
- Around line 19-51: The sidebar array in the VitePress config (the sidebar
property in docs/.vitepress/config.ts) is not formatted to satisfy OXC's oxfmt;
run the formatter or apply equivalent style fixes so the sidebar block conforms
to oxfmt rules (e.g., run `oxfmt --write docs/.vitepress/config.ts` or reformat
the sidebar property manually) and commit the updated file.
In `@docs/FEATURE_CHANGES_PLUSPLUS.md`:
- Around line 1-3: The document uses mixed terminology: the title uses
"cliproxyapi-plusplus" but table headers and inline mentions still use legacy
"`++`"; update all occurrences of the legacy token (e.g., table headers like
"What changed in `++`") to the canonical name "cliproxyapi-plusplus" so the file
consistently uses one term, and run a quick search within
FEATURE_CHANGES_PLUSPLUS.md for any remaining backtick-wrapped ++ or plain ++
strings and replace them; also, per the guideline about consolidating docs,
identify any closely related session docs referenced here and merge relevant
sections into this document and remove any orphaned or outdated markdown files
to avoid duplication.
In `@docs/index.md`:
- Around line 1-5: The document has two top-level H1 headings ("#
cliproxyapi-plusplus" and "# cliproxyapi-plusplus Docs"); keep a single H1 and
demote the other to H2 (for example change "# cliproxyapi-plusplus Docs" to "##
cliproxyapi-plusplus Docs") so the page has one primary title and avoids
duplicate top-level headings.
- Around line 54-56: The quick-check curl example for /v1/models is missing an
Authorization header and will return 401 in default setups; update the example
that currently shows "curl -sS http://localhost:8317/v1/models" to include an
Authorization header using the configured API key (e.g., a Bearer token read
from your environment/usage pattern) so the request authenticates against the
server when listing models.
In `@docs/install.md`:
- Around line 199-201: Update the Go install command to include the
major-version suffix so it matches the module declared in go.mod: change the
displayed module path in the command `go get
github.com/kooshapari/cliproxyapi-plusplus/sdk/cliproxy` to `go get
github.com/kooshapari/cliproxyapi-plusplus/v6/sdk/cliproxy` (and similarly
update any other occurrences of the module path in the docs to include `/v6`).
In `@package.json`:
- Line 6: The "lint" npm script currently masks failures from the TypeScript
linter: when tsconfig.json exists and oxlint-tsgolint fails, the trailing "||
echo ..." makes the overall command exit 0; change the script so that
oxlint-tsgolint is only skipped when tsconfig.json is absent but any failure
when tsconfig.json is present causes a non‑zero exit. Update the "lint" script
entry to first check for tsconfig.json (e.g., with a conditional test for file
existence) and run oxlint-tsgolint directly when present without an
unconditional "|| echo" that would swallow errors, ensuring oxlint-tsgolint
failures propagate; keep the existing oxlint docs/.vitepress step and maintain
behavior of skipping the TypeScript linter only when tsconfig.json truly does
not exist.
- Around line 5-9: CI fails because the workflow calls "bun run test" but
package.json has no "test" script; add a "test" script entry to package.json (or
change the CI to call an existing script). Update the "scripts" object to
include a "test" key that either runs your test runner (e.g., "bun test" /
"vitest" / "jest") or proxies to an existing target, or change the CI task to
call "lint", "format", or the correct script name; ensure the unique symbol
"scripts" and the new "test" key are updated so "bun run test" resolves.
In `@README.md`:
- Around line 35-57: Replace mutable refs in the quick-start by pinning the
Docker image and the example config URL: update the docker-compose service image
reference (currently "eceasy/cli-proxy-api-plus:latest") to a specific semantic
version tag or digest, and change the curl URL that fetches
"config.example.yaml" from the GitHub "main" branch to a URL that references a
specific commit SHA or release tag; modify the README's docker-compose.yml
snippet and the curl command accordingly so onboarding pulls immutable artifacts
reproducibly (search for the image string eceasy/cli-proxy-api-plus:latest and
the URL raw.githubusercontent.com/.../main/config.example.yaml to locate the
exact lines to change).
In `@scripts/devops-checker.sh`:
- Around line 10-15: The current validation for SHARED_HELPER uses only -x and
can accept non-regular executables like directories; update the check around the
block that references SHARED_HELPER to require both that it is a regular file
and executable (use -f and -x together) before proceeding to echo/exit or exec,
e.g., change the conditional guarding the error messages and exit so it fails
when either test is false and only allows continuing when both -f and -x on
SHARED_HELPER pass.
In `@scripts/push-cliproxyapi-plusplus-with-fallback.sh`:
- Around line 10-15: The check in the if-block that gates delegation to the
shared push helper only tests -x on the SHARED_HELPER path; update the condition
to require both that SHARED_HELPER is a regular file and executable (use a
combined test for -f and -x, e.g. test for missing regular file OR not
executable) and adjust the error message to reflect "not a regular file or not
executable" so failures are clearer; target the if block that evaluates
SHARED_HELPER and its echo/exit branch.
In `@Taskfile.yml`:
- Around line 333-340: The current quality:oxc task in Taskfile.yml silently
exits 0 when bun is missing, letting quality:ci pass without running OXC; update
the check inside the quality:oxc cmds so that when bun is missing it fails CI
but remains permissive locally: detect CI via a standard CI env var (e.g., CI)
and if set emit an error message and exit non‑zero, otherwise print the existing
warning and exit 0; reference the quality:oxc task and the quality:ci wiring to
ensure CI runs will fail when bun is absent.
---
Outside diff comments:
In `@docs/OPTIMIZATION_PLAN_2026-02-23.md`:
- Around line 1-43: This dated optimization plan
(docs/OPTIMIZATION_PLAN_2026-02-23.md) should be folded into the canonical
operations/optimization document: copy the actionable items under Tracks 1–4 and
the Architecture Outcome into the maintained optimization/operations page (e.g.,
docs/ARCHITECTURE.md or a dedicated docs/OPERATIONS_OPTIMIZATION.md), normalize
wording to present-state (remove session timestamps), add links to relevant code
locations (pkg/llmproxy/executor/ and note removal of
pkg/llmproxy/runtime/executor/), update targets (lint/test/task commands like
task quality and task test), and then delete the session file to avoid drift;
ensure the merged doc contains an index/navigation entry and a short changelog
note referencing the consolidation.
ℹ️ Review info
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: d3a572c6-8fe7-4dc7-8e16-bd53fd791d7d
⛔ Files ignored due to path filters (1)
bun.lockis excluded by!**/*.lock
📒 Files selected for processing (22)
.github/workflows/docs.yml.gitignore.oxfmtrc.json.oxlintrc.jsonCONTRIBUTING.mdREADME.mdTaskfile.ymldocs/.vitepress/config.tsdocs/FEATURE_CHANGES_PLUSPLUS.mddocs/OPTIMIZATION_PLAN_2026-02-23.mddocs/getting-started.mddocs/index.mddocs/install.mddocs/operations/devops-cicd.mddocs/operations/index.mddocs/provider-catalog.mddocs/provider-usage.mddocs/routing-reference.mddocs/troubleshooting.mdpackage.jsonscripts/devops-checker.shscripts/push-cliproxyapi-plusplus-with-fallback.sh
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: golangci-lint
- GitHub Check: quality-ci
- GitHub Check: go-ci
- GitHub Check: Analyze (Go) (go)
🧰 Additional context used
📓 Path-based instructions (1)
**/*.md
📄 CodeRabbit inference engine (CLAUDE.md)
Consolidate overlapping documentation aggressively; merge related session docs and remove orphaned or outdated markdown files
Files:
docs/provider-catalog.mddocs/operations/devops-cicd.mddocs/getting-started.mddocs/provider-usage.mddocs/troubleshooting.mddocs/index.mdCONTRIBUTING.mddocs/FEATURE_CHANGES_PLUSPLUS.mdREADME.mddocs/routing-reference.mddocs/OPTIMIZATION_PLAN_2026-02-23.mddocs/install.mddocs/operations/index.md
🪛 GitHub Actions: Lint & Test
package.json
[error] 1-1: Command failed: bun run test. a package.json script "test" was not found. Please add a test script or adjust the CI to run an existing script.
🪛 GitHub Actions: VitePress Pages
docs/.vitepress/config.ts
[error] 1-1: oxfmt formatting issues detected in 'docs/.vitepress/config.ts'. Run 'oxfmt --write docs/.vitepress/config.ts' (or remove --check) to fix.
🪛 LanguageTool
docs/index.md
[style] ~29-~29: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...er-specific 5-minute success paths. 5. Provider Catalog for provide...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[style] ~30-~30: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...alog) for provider block reference. 6. Provider Operations for o...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
🔇 Additional comments (9)
README.md (1)
1-7: Branding and contribution-scope updates look consistent.The naming migration and scope guidance are clear and aligned across the updated sections.
Also applies to: 102-105
Taskfile.yml (1)
392-423: DevOps task surface is a good addition.The new
devops:*commands improve operational handoff and standardize repo-level checks/push flows.docs/provider-catalog.md (1)
3-3: Branding update is clear and consistent.docs/routing-reference.md (1)
3-3: Looks good — naming update keeps this page aligned with the rest of the docs.docs/operations/index.md (1)
8-8: Incident navigation updates are solid.The added DevOps/CI-CD and provider-runbook links improve responder flow.
Also applies to: 16-17
docs/provider-usage.md (1)
3-3: Branding rename is clean in both updated sentences.Also applies to: 27-27
docs/troubleshooting.md (1)
53-53:⚠️ Potential issue | 🟠 MajorCLI command names appear inconsistent with current task/build surface.
Lines [53], [166], and [169] use
cliproxyapi-plusplus, butTaskfile.yml(Line [7]) still buildscliproxyapi++. These troubleshooting commands may fail for users following repo-native build paths.🛠️ Suggested correction (if binary name remains `cliproxyapi++`)
-| Kiro/OAuth auth loops | Expired or missing token refresh fields | Re-run `cliproxyapi-plusplus auth`/reimport token path | Refresh credentials, run with fresh token file, avoid duplicate token imports | +| Kiro/OAuth auth loops | Expired or missing token refresh fields | Re-run `cliproxyapi++ auth`/reimport token path | Refresh credentials, run with fresh token file, avoid duplicate token imports | @@ -./cliproxyapi-plusplus auth --provider antigravity --oauth-callback-port 51221 +./cliproxyapi++ auth --provider antigravity --oauth-callback-port 51221 @@ -./cliproxyapi-plusplus --oauth-callback-port 51221 +./cliproxyapi++ --oauth-callback-port 51221As per coding guidelines, "Consolidate overlapping documentation aggressively; merge related session docs and remove orphaned or outdated markdown files".
Also applies to: 166-170
⛔ Skipped due to learnings
Learnt from: CR Repo: KooshaPari/cliproxyapi-plusplus PR: 0 File: CLAUDE.md:0-0 Timestamp: 2026-03-01T02:42:42.896Z Learning: Applies to **/*.md : Consolidate overlapping documentation aggressively; merge related session docs and remove orphaned or outdated markdown filesdocs/getting-started.md (1)
3-96: Branding and example updates are consistent and actionable.The renamed project references, Docker image path, and sample payload text align cleanly across the changed sections.
docs/operations/devops-cicd.md (1)
1-46: Task and helper documentation is aligned with implementation.The documented
devops:*task set andPHENOTYPE_DEVOPS_*override behavior are consistent with the referenced Taskfile and script wiring.
| - name: Install dependencies | ||
| working-directory: docs | ||
| run: npm install --frozen-lockfile |
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
npm install --frozen-lockfile vs npm ci documentation
💡 Result:
npm ciis npm’s “frozen/clean” install for CI: it requires an existingpackage-lock.json/npm-shrinkwrap.json, fails if the lockfile doesn’t matchpackage.json, removesnode_modulesfirst, and never writes/updatespackage-lock.jsonorpackage.json. [1]npm install --frozen-lockfileis not an npm option. The--frozen-lockfileflag exists in other package managers, not npm. For npm, the closest equivalent isnpm ci. [1]npm installinstalls dependencies and (when a lockfile exists) is “driven by”package-lock.json/shrinkwrap, but unlikenpm ci, it’s not specifically the “immutable CI install” command and can update lockfile state as part of normal workflows. [2]- If you meant Yarn:
yarn install --immutableis the modern “don’t modify the lockfile” behavior;--frozen-lockfileis an alias for backward compatibility. [3] (Yarn Classic docs also describe--frozen-lockfile.) [4] - If you meant pnpm:
pnpm install --frozen-lockfileprevents lockfile updates and fails when the lockfile is out of sync (and is typically enforced in CI). [5]
Sources:
[1] npm Docs – npm ci https://docs.npmjs.com/cli/v10/commands/npm-ci/
[2] npm Docs – npm install https://docs.npmjs.com/cli/v6/commands/npm-install/
[3] Yarn Docs – yarn install (--immutable / --frozen-lockfile alias) https://yarnpkg.com/cli/install
[4] Yarn Classic Docs – --frozen-lockfile https://classic.yarnpkg.com/lang/en/docs/cli/install/
[5] pnpm docs mirror – pnpm install --frozen-lockfile behavior https://pnpm.nodejs.cn/9.x/cli/install/
🌐 Web query:
npm v10 --frozen-lockfile flag support
💡 Result:
npm v10 does not support a --frozen-lockfile flag (that flag name is used by other package managers, not npm). In npm, the “frozen lockfile” behavior is provided by npm ci. It requires an existing package-lock.json/npm-shrinkwrap.json, fails if the lockfile and package.json don’t match, removes any existing node_modules, and does not write/update the lockfile (i.e., installs are effectively “frozen”). [1]
If you use npm install instead, npm may update package-lock.json; the npm install docs describe lockfile-related behaviors/config such as package-lock / package-lock-only. [2]
Practical equivalent:
- CI / reproducible install:
npm ci[1]
Sources
[1] npm Docs – npm ci (clean install, lockfile mismatch fails, doesn’t write lockfiles) (docs.npmjs.com)
[2] npm Docs – npm install (lockfile behavior/config options; no --frozen-lockfile) (docs.npmjs.com)
Citations:
- 1: https://docs.npmjs.com/cli/v8/commands/npm-ci
- 2: https://docs.npmjs.com/cli/v10/commands/npm-install/
Replace npm install --frozen-lockfile with npm ci.
--frozen-lockfile is not a valid npm flag (it exists in Yarn and pnpm, not npm). For CI environments, npm ci is the correct command—it ensures reproducible installs by failing if the lockfile doesn't match package.json and never updating the lockfile. Using an unrecognized flag can cause unexpected behavior.
✅ Suggested fix
- name: Install dependencies
working-directory: docs
- run: npm install --frozen-lockfile
+ run: npm ci📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - name: Install dependencies | |
| working-directory: docs | |
| run: npm install --frozen-lockfile | |
| - name: Install dependencies | |
| working-directory: docs | |
| run: npm ci |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.github/workflows/docs.yml around lines 61 - 63, Replace the incorrect npm
flag in the GitHub Actions job step named "Install dependencies": change the run
command from "npm install --frozen-lockfile" to "npm ci" so the workflow uses
the proper CI-safe install that respects the lockfile and fails if it is out of
sync.
| .kittify/.dashboard | ||
|
|
||
| # AI tool artifacts | ||
| .cursor/ | ||
| .kittify/ |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Redundant ignore entry for .kittify/.dashboard.
Line 77 (.kittify/) already covers Line 73 (.kittify/.dashboard), so the dashboard-specific entry can be removed for clarity.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.gitignore around lines 73 - 77, Remove the redundant .gitignore entry
`.kittify/.dashboard` because the existing `.kittify/` rule already ignores the
entire directory; delete the specific `.kittify/.dashboard` line and keep the
broader `.kittify/` entry to simplify and avoid duplication.
| #### Which repository to use? | ||
| - **Third-party provider support**: Submit your PR directly to [kooshapari/cliproxyapi-plusplus](https://github.com/kooshapari/cliproxyapi-plusplus). | ||
| - **Core logic improvements**: If the change is not specific to a third-party provider, please propose it to the [mainline project](https://github.com/kooshapari/cliproxyapi) first. | ||
| - **Core logic improvements**: If the change is not specific to a third-party provider, please propose it to the [mainline project](https://github.com/kooshapari/cliproxyapi-plusplus) first. |
There was a problem hiding this comment.
Core-logic contribution path is currently indistinguishable from provider PR path.
Line 29 links to the same repository URL as Line 28, so the “mainline project first” instruction is unclear. Use the actual mainline URL or reword the instruction to match the intended workflow.
Proposed doc fix
-- **Core logic improvements**: If the change is not specific to a third-party provider, please propose it to the [mainline project](https://github.com/kooshapari/cliproxyapi-plusplus) first.
+- **Core logic improvements**: For non-provider changes, open an issue/PR in this repository first (or update this link to the intended mainline repository).🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@CONTRIBUTING.md` at line 29, The "Core logic improvements" guideline
currently points to the same repository as the provider path, making the
"mainline project first" instruction ambiguous; update the "**Core logic
improvements**" line to either replace the URL with the actual mainline
repository URL (the intended target) or reword the sentence to remove the
duplicate link and clearly state the intended workflow (e.g., "Propose
core-logic changes to the mainline project first" with the correct mainline URL
or "Propose core-logic changes to the mainline project first; provider-specific
changes may be submitted here"). Ensure you edit the exact "**Core logic
improvements**" paragraph so the guidance is unambiguous.
| sidebar: [ | ||
| { | ||
| text: "Guide", | ||
| items: [ | ||
| { text: "Overview", link: "/" }, | ||
| { text: "Getting Started", link: "/getting-started" }, | ||
| { text: "Install", link: "/install" }, | ||
| { text: "Provider Usage", link: "/provider-usage" }, | ||
| { text: "Provider Catalog", link: "/provider-catalog" }, | ||
| { text: "DevOps and CI/CD", link: "/operations/devops-cicd" }, | ||
| { text: "Provider Operations", link: "/provider-operations" }, | ||
| { text: "Troubleshooting", link: "/troubleshooting" }, | ||
| { text: "Planning Boards", link: "/planning/" } | ||
| ] | ||
| }, | ||
| { | ||
| text: "Reference", | ||
| items: [ | ||
| { text: "Routing and Models", link: "/routing-reference" }, | ||
| { text: "Feature Guides", link: "/features/" }, | ||
| { text: "Docsets", link: "/docsets/" } | ||
| ] | ||
| }, | ||
| { | ||
| text: "API", | ||
| items: [ | ||
| { text: "API Index", link: "/api/" }, | ||
| { text: "OpenAI-Compatible API", link: "/api/openai-compatible" }, | ||
| { text: "Management API", link: "/api/management" }, | ||
| { text: "Operations API", link: "/api/operations" } | ||
| ] | ||
| } | ||
| ], |
There was a problem hiding this comment.
Reformat this sidebar block to satisfy OXC formatting gate.
CI already reports oxfmt failure for this file. Please run formatter on docs/.vitepress/config.ts (or apply equivalent style adjustments) before merge.
✅ Command to fix
oxfmt --write docs/.vitepress/config.ts🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/.vitepress/config.ts` around lines 19 - 51, The sidebar array in the
VitePress config (the sidebar property in docs/.vitepress/config.ts) is not
formatted to satisfy OXC's oxfmt; run the formatter or apply equivalent style
fixes so the sidebar block conforms to oxfmt rules (e.g., run `oxfmt --write
docs/.vitepress/config.ts` or reformat the sidebar property manually) and commit
the updated file.
| # cliproxyapi-plusplus Feature Change Reference (`plusplus` vs baseline) | ||
|
|
||
| This document explains what changed in `cliproxyapi++`, why it changed, and how it affects users, integrators, and maintainers. | ||
| This document explains what changed in `cliproxyapi-plusplus`, why it changed, and how it affects users, integrators, and maintainers. |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Rename is incomplete; legacy ++ terminology remains in section tables.
Title/introduction now use cliproxyapi-plusplus, but multiple table headers still say What changed in \++``. Please align the whole file to one term to avoid stale wording.
As per coding guidelines, "Consolidate overlapping documentation aggressively; merge related session docs and remove orphaned or outdated markdown files".
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/FEATURE_CHANGES_PLUSPLUS.md` around lines 1 - 3, The document uses mixed
terminology: the title uses "cliproxyapi-plusplus" but table headers and inline
mentions still use legacy "`++`"; update all occurrences of the legacy token
(e.g., table headers like "What changed in `++`") to the canonical name
"cliproxyapi-plusplus" so the file consistently uses one term, and run a quick
search within FEATURE_CHANGES_PLUSPLUS.md for any remaining backtick-wrapped ++
or plain ++ strings and replace them; also, per the guideline about
consolidating docs, identify any closely related session docs referenced here
and merge relevant sections into this document and remove any orphaned or
outdated markdown files to avoid duplication.
| "private": true, | ||
| "type": "module", | ||
| "scripts": { | ||
| "lint": "oxlint --config .oxlintrc.json docs/.vitepress && (test -f tsconfig.json && oxlint-tsgolint --tsconfig tsconfig.json || echo '[SKIP] tsconfig.json not found; skipping oxlint-tsgolint')", |
There was a problem hiding this comment.
lint script currently swallows TypeScript lint failures.
On Line 6, if tsconfig.json exists and oxlint-tsgolint fails, the || echo ... branch runs and exits 0, causing false-green lint.
Proposed fix
- "lint": "oxlint --config .oxlintrc.json docs/.vitepress && (test -f tsconfig.json && oxlint-tsgolint --tsconfig tsconfig.json || echo '[SKIP] tsconfig.json not found; skipping oxlint-tsgolint')",
+ "lint": "oxlint --config .oxlintrc.json docs/.vitepress && (if test -f tsconfig.json; then oxlint-tsgolint --tsconfig tsconfig.json; else echo '[SKIP] tsconfig.json not found; skipping oxlint-tsgolint'; fi)",📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "lint": "oxlint --config .oxlintrc.json docs/.vitepress && (test -f tsconfig.json && oxlint-tsgolint --tsconfig tsconfig.json || echo '[SKIP] tsconfig.json not found; skipping oxlint-tsgolint')", | |
| "lint": "oxlint --config .oxlintrc.json docs/.vitepress && (if test -f tsconfig.json; then oxlint-tsgolint --tsconfig tsconfig.json; else echo '[SKIP] tsconfig.json not found; skipping oxlint-tsgolint'; fi)", |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@package.json` at line 6, The "lint" npm script currently masks failures from
the TypeScript linter: when tsconfig.json exists and oxlint-tsgolint fails, the
trailing "|| echo ..." makes the overall command exit 0; change the script so
that oxlint-tsgolint is only skipped when tsconfig.json is absent but any
failure when tsconfig.json is present causes a non‑zero exit. Update the "lint"
script entry to first check for tsconfig.json (e.g., with a conditional test for
file existence) and run oxlint-tsgolint directly when present without an
unconditional "|| echo" that would swallow errors, ensuring oxlint-tsgolint
failures propagate; keep the existing oxlint docs/.vitepress step and maintain
behavior of skipping the TypeScript linter only when tsconfig.json truly does
not exist.
| # Create deployment directory | ||
| mkdir -p ~/cli-proxy && cd ~/cli-proxy | ||
|
|
||
| # Create docker-compose.yml | ||
| cat > docker-compose.yml << 'EOF' | ||
| services: | ||
| cli-proxy-api: | ||
| image: eceasy/cli-proxy-api-plus:latest | ||
| container_name: cli-proxy-api-plus | ||
| ports: | ||
| - "8317:8317" | ||
| volumes: | ||
| - ./config.yaml:/CLIProxyAPI/config.yaml | ||
| - ./auths:/root/.cli-proxy-api | ||
| - ./logs:/CLIProxyAPI/logs | ||
| restart: unless-stopped | ||
| EOF | ||
|
|
||
| # Download example config | ||
| curl -o config.yaml https://raw.githubusercontent.com/kooshapari/cliproxyapi-plusplus/main/config.example.yaml | ||
|
|
||
| # Pull and start | ||
| docker compose pull && docker compose up -d |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Pin Quick Start artifacts instead of floating latest/main.
On Lines [42] and [54], onboarding depends on mutable refs (:latest and main), which can break reproducibility and incident rollback.
🔧 Proposed hardening
- image: eceasy/cli-proxy-api-plus:latest
+ image: eceasy/cli-proxy-api-plus:${CLIPROXY_TAG:-vX.Y.Z}
@@
-curl -o config.yaml https://raw.githubusercontent.com/kooshapari/cliproxyapi-plusplus/main/config.example.yaml
+curl -o config.yaml https://raw.githubusercontent.com/kooshapari/cliproxyapi-plusplus/${CLIPROXY_TAG:-vX.Y.Z}/config.example.yaml🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@README.md` around lines 35 - 57, Replace mutable refs in the quick-start by
pinning the Docker image and the example config URL: update the docker-compose
service image reference (currently "eceasy/cli-proxy-api-plus:latest") to a
specific semantic version tag or digest, and change the curl URL that fetches
"config.example.yaml" from the GitHub "main" branch to a URL that references a
specific commit SHA or release tag; modify the README's docker-compose.yml
snippet and the curl command accordingly so onboarding pulls immutable artifacts
reproducibly (search for the image string eceasy/cli-proxy-api-plus:latest and
the URL raw.githubusercontent.com/.../main/config.example.yaml to locate the
exact lines to change).
| if [[ ! -x "$SHARED_HELPER" ]]; then | ||
| echo "Shared devops checker not found or not executable: $SHARED_HELPER" >&2 | ||
| echo "Set PHENOTYPE_DEVOPS_REPO_ROOT or PHENOTYPE_DEVOPS_CHECKER_HELPER" >&2 | ||
| echo "to point at a valid shared script." >&2 | ||
| exit 1 | ||
| fi |
There was a problem hiding this comment.
Harden helper validation to require a regular executable file.
Using only -x can misclassify paths (e.g., executable directories). Check -f and -x together before exec.
Proposed fix
-if [[ ! -x "$SHARED_HELPER" ]]; then
+if [[ ! -f "$SHARED_HELPER" || ! -x "$SHARED_HELPER" ]]; then
echo "Shared devops checker not found or not executable: $SHARED_HELPER" >&2🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@scripts/devops-checker.sh` around lines 10 - 15, The current validation for
SHARED_HELPER uses only -x and can accept non-regular executables like
directories; update the check around the block that references SHARED_HELPER to
require both that it is a regular file and executable (use -f and -x together)
before proceeding to echo/exit or exec, e.g., change the conditional guarding
the error messages and exit so it fails when either test is false and only
allows continuing when both -f and -x on SHARED_HELPER pass.
| if [[ ! -x "$SHARED_HELPER" ]]; then | ||
| echo "Shared push helper not found or not executable: $SHARED_HELPER" >&2 | ||
| echo "Set PHENOTYPE_DEVOPS_REPO_ROOT or PHENOTYPE_DEVOPS_PUSH_HELPER" >&2 | ||
| echo "to point at a valid shared script." >&2 | ||
| exit 1 | ||
| fi |
There was a problem hiding this comment.
Use regular-file + executable checks before delegating push helper.
Line 10 currently checks only -x; use -f + -x to avoid unclear failures when the path is not a regular executable script.
Proposed fix
-if [[ ! -x "$SHARED_HELPER" ]]; then
+if [[ ! -f "$SHARED_HELPER" || ! -x "$SHARED_HELPER" ]]; then
echo "Shared push helper not found or not executable: $SHARED_HELPER" >&2📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| if [[ ! -x "$SHARED_HELPER" ]]; then | |
| echo "Shared push helper not found or not executable: $SHARED_HELPER" >&2 | |
| echo "Set PHENOTYPE_DEVOPS_REPO_ROOT or PHENOTYPE_DEVOPS_PUSH_HELPER" >&2 | |
| echo "to point at a valid shared script." >&2 | |
| exit 1 | |
| fi | |
| if [[ ! -f "$SHARED_HELPER" || ! -x "$SHARED_HELPER" ]]; then | |
| echo "Shared push helper not found or not executable: $SHARED_HELPER" >&2 | |
| echo "Set PHENOTYPE_DEVOPS_REPO_ROOT or PHENOTYPE_DEVOPS_PUSH_HELPER" >&2 | |
| echo "to point at a valid shared script." >&2 | |
| exit 1 | |
| fi |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@scripts/push-cliproxyapi-plusplus-with-fallback.sh` around lines 10 - 15, The
check in the if-block that gates delegation to the shared push helper only tests
-x on the SHARED_HELPER path; update the condition to require both that
SHARED_HELPER is a regular file and executable (use a combined test for -f and
-x, e.g. test for missing regular file OR not executable) and adjust the error
message to reflect "not a regular file or not executable" so failures are
clearer; target the if block that evaluates SHARED_HELPER and its echo/exit
branch.
| quality:oxc: | ||
| desc: "Run OXC lint + format checks for docs TypeScript/JavaScript files" | ||
| cmds: | ||
| - | | ||
| if ! command -v bun >/dev/null 2>&1; then | ||
| echo "[WARN] bun not found; skipping OXC checks" | ||
| exit 0 | ||
| fi |
There was a problem hiding this comment.
Do not silently skip OXC checks in CI.
Lines [337-340] currently return success when bun is missing, but Line [358] wires this task into quality:ci; this can let CI pass without running OXC gates.
✅ Proposed fix (strict in CI, permissive locally)
quality:oxc:
desc: "Run OXC lint + format checks for docs TypeScript/JavaScript files"
cmds:
- |
if ! command -v bun >/dev/null 2>&1; then
- echo "[WARN] bun not found; skipping OXC checks"
- exit 0
+ if [ "${CI:-}" = "true" ] || [ "${CI:-}" = "1" ]; then
+ echo "[FAIL] bun not found; cannot run OXC checks in CI"
+ exit 1
+ fi
+ echo "[WARN] bun not found; skipping OXC checks locally"
+ exit 0
fi
bun install --frozen-lockfile
bun run lint
bun run format:checkAlso applies to: 358-358
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@Taskfile.yml` around lines 333 - 340, The current quality:oxc task in
Taskfile.yml silently exits 0 when bun is missing, letting quality:ci pass
without running OXC; update the check inside the quality:oxc cmds so that when
bun is missing it fails CI but remains permissive locally: detect CI via a
standard CI env var (e.g., CI) and if set emit an error message and exit
non‑zero, otherwise print the existing warning and exit 0; reference the
quality:oxc task and the quality:ci wiring to ensure CI runs will fail when bun
is absent.
Summary\n- migrate lint/format wiring to OXC stack (oxlint, oxfmt, tsgolint)\n- add OXC config files and remove biome/prettier/eslint surfaces where present\n- keep repo-native gates wired to the new stack\n\n## Validation\n- ran repo-native lint/format/quality commands in each lane\n- pre-existing debt and environment blockers are documented in lane notes
Summary by CodeRabbit
Release Notes
Documentation
Chores