Skip to content

[pull] main from Alishahryar1:main - #249

Merged
pull[bot] merged 6 commits into
Co-Contribute-OpenSource:mainfrom
Alishahryar1:main
Sep 27, 2026
Merged

pull[bot] merged 6 commits into
Co-Contribute-OpenSource:mainfrom
Alishahryar1:main

Conversation

@pull

@pull pull Bot commented Sep 27, 2026 •

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

Alishahryar1 and others added 6 commits September 26, 2026 14:00
## Why

Large fcc-doctor reports make bug reports difficult to scan.

## How

Automatically wrap the doctor section in a collapsed, JSON-highlighted
block when a bug report is opened or edited. Preserve the report and
surrounding issue text, avoid wrapping it again, and let the version
validator read both original and collapsed reports.


<!-- greptile_comment -->

<!-- greptile_summary -->

<h2><a
href="https://app.greptile.com/api/retrigger?id=69970665"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://greptile-static-assets.s3.amazonaws.com/badges/RetriggerDark.svg?v=2"><source
media="(prefers-color-scheme: light)"
srcset="https://greptile-static-assets.s3.amazonaws.com/badges/Retrigger.svg?v=2"><img
alt="Retrigger"
src="https://greptile-static-assets.s3.amazonaws.com/badges/Retrigger.svg?v=2"
align="right"></picture></a>Confidence Score: 4/5</h2>

<!-- greptile-risk -->

Not safe to merge until formatting preserves intervening author edits.

<h2><a
href="https://app.greptile.com/api/ide/codex?prompt=IMPORTANT%3A%20Work%20in%20the%20repository%20%22alishahryar1%2Ffree-claude-code%22%20on%20the%20existing%20branch%20%22ali%2Fcollapsible-doctor-output%22.%20Checkout%20that%20branch%20%E2%80%94%20do%20NOT%20create%20a%20new%20branch%20or%20open%20a%20new%20PR.%20Push%20your%20changes%20to%20%22ali%2Fcollapsible-doctor-output%22.%0A%0A%23%23%23%20Issue%201%0A.github%2Fworkflows%2Fvalidate-bug-report-version.yml%3A79%0AIf%20an%20author%20edits%20an%20issue%20after%20the%20workflow%20fetches%20it%2C%20this%20update%20replaces%20the%20entire%20body%20with%20a%20formatted%20copy%20of%20the%20older%20version.%20The%20author's%20changes%20can%20silently%20disappear%2C%20even%20outside%20the%20doctor%20output.%20Preserve%20the%20newer%20body%20instead%20of%20overwriting%20it.%0A%0A---%0A%0AFor%20each%20issue%20above%2C%20determine%20whether%20it%20is%20valid%20and%20should%20be%20fixed.%20If%20so%2C%20fix%20it%20directly.&repo=alishahryar1%2Ffree-claude-code&pr=1911&platform=github"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://greptile-static-assets.s3.amazonaws.com/badges/FixAllInCodexDark.svg?v=7"><source
media="(prefers-color-scheme: light)"
srcset="https://greptile-static-assets.s3.amazonaws.com/badges/FixAllInCodex.svg?v=7"><img
alt="Fix All in Codex"
src="https://greptile-static-assets.s3.amazonaws.com/badges/FixAllInCodex.svg?v=7"
align="right"></picture></a>Findings</h2>

1. <img alt="P1"
src="https://greptile-static-assets.s3.amazonaws.com/badges/p1.svg?v=9"
align="top">&nbsp;**Concurrent edits can be lost** <a
href="https://github.com/Alishahryar1/free-claude-code/pull/1911#discussion_r4112711510">▶</a>

<details open><summary>Summary</summary>

The PR collapses valid doctor output into a JSON-highlighted block and
adds parsing and formatting tests. Its new full-body update can erase an
author's edit made after the workflow fetches the issue. This should be
fixed before merging.
</details>

<!-- greptile_confidence_score:4 -->

<sub>Reviews (1) · Last reviewed commit: ["Collapse doctor output in
submitted bug
..."](https://github.com/alishahryar1/free-claude-code/commit/0044dc8779ce80302cfeac1402a460ef0f81673e)</sub>

<!-- /greptile_comment -->
Closes #1590

## Problem

`fcc-cline` runs Cline inside an ephemeral configuration tree pointed at
the FCC proxy
(`localhost:8082`). However, interactive Cline passes `backendMode:
"auto"` to its core
(verified in the shipped `cline.exe`), overriding the launcher's
`CLINE_SESSION_BACKEND_MODE=local`. With `auto`, Cline may attach to —
or start — a
detached **Hub daemon** that:

1. resolves provider settings from the user's **global** store
(`~/.cline/data/settings/providers.json`) instead of FCC's ephemeral
providers file;
2. **outlives the launcher** (it is not killed when the terminal
closes);
3. is auto-discovered by the *next* `fcc-cline` run via
`~/.cline/data/locks/hub/production.json`, routing traffic to the wrong
provider.

This is exactly the behavior reported in #1590:
> Run fcc-cline again → the server might already be running, but Cline
might be
> connecting to the wrong OpenAI provider.

## Fix — isolation over deletion

`build_cline_launcher_env()` now redirects `CLINE_HUB_DISCOVERY_PATH` to
`<ephemeral-tempdir>/hub/production.json` — a path that never exists and
is never written:

- The child can never **discover any pre-existing Hub** (FCC-created or
user-created),
  so a stale daemon can no longer hijack the session.
- If Cline spawns a Hub of its own, its discovery file is written
**inside the ephemeral
tree**, which the launcher deletes on exit — no Hub state survives the
session.
- A user-run `cline hub` (outside FCC) keeps its own discovery file at
the default
  location and is untouched.

Defense-in-depth notes:

- `CLINE_HUB_DISCOVERY_PATH` is an internal Cline env var present in the
shipped binary.
The root cause is tracked upstream at cline/cline#13631, with a fix in
cline/cline#13637
(owner-filed, unmerged at the time of writing). If that env var is ever
renamed
upstream, this guard degrades to today's behavior — **no new failure
mode**.
- Deliberately scoped to isolation: this change does not attempt to kill
foreign Hub
  processes.

## Testing

- 2 tests updated + 2 new in `tests/cli/test_cline_launcher.py`:
- `test_cline_hub_discovery_is_isolated_from_user_hub_state` — a
pre-existing user
    discovery file is overridden, never read;
- `test_cline_hub_discovery_path_lives_in_ephemeral_temp_tree` — the
redirected path
    sits inside the ephemeral tree and does not exist at spawn time.
- Quality gates: `ruff format --check`, `ruff check`, `ty check` — all
green.
- Full suite: **4407 passed / 148 skipped / 0 failed** (Python 3.14,
Windows).
- e2e (Playwright): green except

`e2e/test_chat_sessions.py::test_chat_context_meter_shows_used_over_advertised_context_window`,
which fails on clean `main` as well (pre-existing, unrelated to this
change).
- Version bumped 5.18.11 → **5.18.12** (PATCH) with `uv lock` in the
same commit.

## Version

5.18.12 — PATCH above base 5.18.11 (bug fix only, per CONTRIBUTING
SemVer policy).


































<!-- greptile_comment -->

<!-- greptile_summary -->

<h2><a
href="https://app.greptile.com/api/retrigger?id=58796606"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://greptile-static-assets.s3.amazonaws.com/badges/RetriggerDark.svg?v=2"><source
media="(prefers-color-scheme: light)"
srcset="https://greptile-static-assets.s3.amazonaws.com/badges/Retrigger.svg?v=2"><img
alt="Retrigger"
src="https://greptile-static-assets.s3.amazonaws.com/badges/Retrigger.svg?v=2"
align="right"></picture></a>Confidence Score: 5/5</h2>

<!-- greptile-risk -->

No outstanding findings block merging.

<h3>Summary</h3>

The PR isolates each fcc-cline launch’s Hub discovery path in its
temporary configuration tree. The current code creates the path’s parent
directory before starting Cline, fixing the previously reported launch
issue.

<!-- greptile_confidence_score:5 -->

<sub>Reviews (17) · Last reviewed commit: ["Merge branch &#39;main&#39;
into
fix-cline-hub-h..."](https://github.com/alishahryar1/free-claude-code/commit/2df1fefa2002bfa6c2e54eb3a8360836e6a69b20)</sub>

<!-- /greptile_comment -->

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Co-authored-by: Ali Khokhar <20476625+Alishahryar1@users.noreply.github.com>
## Why

OpenCode Go rejects provider smoke requests that lack a conversation ID.
The settings-apply Playwright test also has a timing race because its
wait accepts a Promise before request interception completes.

## How

Give smoke requests an FCC smoke User-Agent and a conversation ID. Reuse
the ID across turns, tool continuations, and disconnect follow-ups, and
generate fresh IDs for independent conversations. Apply the headers to
Messages and Responses probes while preserving caller-supplied headers
and authentication.

Make the settings-apply browser test wait for a boolean set by the route
handler after it captures the request.


<!-- greptile_comment -->

<!-- greptile_summary -->

<h2><a
href="https://app.greptile.com/api/retrigger?id=69997246"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://greptile-static-assets.s3.amazonaws.com/badges/RetriggerDark.svg?v=2"><source
media="(prefers-color-scheme: light)"
srcset="https://greptile-static-assets.s3.amazonaws.com/badges/Retrigger.svg?v=2"><img
alt="Retrigger"
src="https://greptile-static-assets.s3.amazonaws.com/badges/Retrigger.svg?v=2"
align="right"></picture></a>Confidence Score: 5/5</h2>

<!-- greptile-risk -->

No blocking findings were identified.

<details open><summary>Summary</summary>

The PR adds conversation headers to smoke-client requests, reuses
session IDs for related requests, and adds header tests. The latest
change updates how a Playwright test detects an intercepted
configuration request.
</details>

<!-- greptile_confidence_score:5 -->

<sub>Reviews (2) · Last reviewed commit: ["Wait for actual Apply request
intercepti..."](https://github.com/alishahryar1/free-claude-code/commit/2db361c3d534d38f28071ccd42387a19fbc41e54)</sub>

<!-- /greptile_comment -->
## Why

Nemotron Ultra 550B on NVIDIA NIM rejects numeric reasoning budgets
because its deployed model runner does not support them. FCC currently
converts named effort such as `high` into a numeric budget, causing
repeated upstream 500 errors before Claude can use a tool. Direct
requests with named effort succeed.

## How

Use the existing named-effort encoder in NIM's shared request finalizer
for Claude Messages and Codex Responses. Pass named efforts unchanged,
send `none` for explicit off, use `high` for enabled reasoning without a
named effort, and omit the control for provider defaults. Budget-only
requests use the enabled default instead of sending a numeric budget.
Remove the obsolete numeric-budget recovery code.

Accepted behavior: NVIDIA's models support different sets of names.
Unsupported values remain provider errors rather than being silently
remapped or removed. For example, GPT-OSS 20B rejects `none`, `minimal`,
`xhigh`, and `max`. No model-name allowlist is introduced. Acceptance of
a name does not imply every model implements a distinct reasoning
strength for it.
…1913)

## Why

FCC's Code history lives in `code/code.db`, with schema creation,
upgrades, and restart recovery mixed into its store. Move this existing
data into `fcc.db` and give schema changes an ordered migration history
for future consolidation.

## How

- Move the existing database automatically during startup after FCC has
been stopped for the update. Recover and checkpoint SQLite journals,
close the database, then rename it under the existing ownership lock.
- Extract the three existing upgrades into numbered migration modules.
Apply only pending versions, committing each migration and its version
together. Preserve sessions, transcript ordering, prompts, and the
current constraints.
- Keep Code restart recovery separate from schema upgrades. Preserve
conflicting files on failure, resume pending migrations on restart, and
retain independently retryable retired Chat cleanup.






<!-- greptile_comment -->

<!-- greptile_summary -->

<h2><a
href="https://app.greptile.com/api/retrigger?id=70020000"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://greptile-static-assets.s3.amazonaws.com/badges/RetriggerDark.svg?v=2"><source
media="(prefers-color-scheme: light)"
srcset="https://greptile-static-assets.s3.amazonaws.com/badges/Retrigger.svg?v=2"><img
alt="Retrigger"
src="https://greptile-static-assets.s3.amazonaws.com/badges/Retrigger.svg?v=2"
align="right"></picture></a>Confidence Score: 4/5</h2>

<!-- greptile-risk -->

Do not merge until NIM preserves explicit reasoning budgets or rejects
requests it cannot represent.

What we checked:
- T-Rex produced a proof for the posted P1 finding, including a
credential-free NIM request reproduction script. <a
href="https://www.greptile.com/trex"><img alt="T-Rex"
src="https://greptile-static-assets.s3.amazonaws.com/trex/trex_green.svg"
height="16" align="absmiddle"></a>
- T-Rex produced a second proof for a posted P1 finding. See the
corresponding review comment for finding details. <a
href="https://www.greptile.com/trex"><img alt="T-Rex"
src="https://greptile-static-assets.s3.amazonaws.com/trex/trex_green.svg"
height="16" align="absmiddle"></a>
- T-Rex executed a general-contract-validation-proof by running Nim
budget repro before and after; the policy retained budget 321 with no
numeric budget in both runs, and the mocked 200 OK responses do not
establish live NIM acceptance. <a
href="https://www.greptile.com/trex"><img alt="T-Rex"
src="https://greptile-static-assets.s3.amazonaws.com/trex/trex_green.svg"
height="16" align="absmiddle"></a>

<details open><summary>Summary</summary>

The PR moves Code history into `fcc.db`, adds ordered SQLite migrations,
and updates the smoke test to read the new database. The NIM request
change drops explicit numeric reasoning budgets and must be corrected
before merging.
</details>

<!-- greptile_confidence_score:4 -->

<sub>Reviews (3) · Last reviewed commit: ["Merge branch &#39;main&#39;
into
sqlite-fcc-stor..."](https://github.com/alishahryar1/free-claude-code/commit/1bff6bf9b66e39cbbf85647bd0e6a7d2f08b6338)</sub>

<!-- /greptile_comment -->
## Why

`fcc-update` runs the full installer even when FCC is already current.
Check the installed version against PyPI first so unnecessary
reinstallations are skipped.

## How

Add a shared, short-lived version checker before the native launcher
handoff. Current or newer installations exit successfully, an available
update shows both versions and runs the installer, and a failed check
stops with an error. The checker exits before installation so FCC can
replace itself safely.

Installer options do not bypass the version gate. The README directs
users to the installer for same-version reinstallation or optional
component changes.
@pull pull Bot locked and limited conversation to collaborators Sep 27, 2026
@pull pull Bot added the ⤵️ pull label Sep 27, 2026
@pull
pull Bot merged commit f3ec474 into Co-Contribute-OpenSource:main Sep 27, 2026
10 of 11 checks passed

This branch had an error being deployed

1 failed deployment
pypi — f3ec4746 Deployed Sep 27, 2026 by pull[bot] via Publish to PyPI #6
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants