Higher priority for user input of max_prefill_tokens & format - #540
Merged
Merged
Conversation
timethink
pushed a commit
to timethink/sglang
that referenced
this pull request
Mar 9, 2025
vschandramourya
pushed a commit
to vschandramourya/sglang
that referenced
this pull request
Feb 3, 2026
efschu
added a commit
to efschu/htsglang
that referenced
this pull request
Aug 4, 2026
… the split
Two things the desk version could not have told me, both found by driving
the thing rather than reading it.
Accept-Encoding is now pinned to identity when the client omits it. The
response body is forwarded without decompression, so aiohttp adding its own
"gzip, deflate" made the proxy hand a gzipped body to a client that never
advertised gzip -- a plain curl through the first version got binary garbage
where the error envelope should have been. A client that DOES send the
header keeps its own value and gets the encoded bytes it asked for. Two
tests pin both directions; the first version of the absent-header test
FAILED because aiohttp's own test client adds the header, which is how the
test earned the skip_auto_headers it now uses.
Live acceptance, recorded in the runbook. A real claude -p 2.1.221 was
driven through the router against the live 30030 boot in a separate process;
the running session and the server were untouched. The subagent returned the
marker it could only get through a Read round trip,
sglang:generation_tokens_total{priority="0"} moved 14820 -> 14926 on 30030,
and the router's decision log carries the split in order: two parent turns
on claude-fable-5 upstream, two Qwen3.6-27B turns local (the one returning
tool_use and the one carrying tool_result), parent's closing turn upstream.
The same run measured why the shim exists, against a boot that predates the
front fix: the identical body without a thinking field, sent DIRECT to 30030,
spent its whole 40-token budget on a thinking block (stop_reason max_tokens,
zero text content); through the router it answered cleanly. That is the
agent-loop blocker in one pair of requests, and it stops mattering the
moment 30030 restarts onto the front fix.
Tests: 95 passed across the anthropic unit suite (19 router tests).
efschu
added a commit
to efschu/htsglang
that referenced
this pull request
Aug 4, 2026
…s protocol-conformance gaps (sgl-project#540) Single commit, zero drift (branch base is exactly this line's prior tip), clean auto-merge including FEATURE_CATALOG.md (mid-paragraph splice into the existing "Anthropic Messages front" entry, applied cleanly since nothing on this line touched that text since divergence). Audit of the Anthropic front against the real Messages API found seven divergences; three break a Claude Code agent loop outright. Headline fix, G1: extended thinking now defaults OFF -- an absent `thinking` field means `{"type":"disabled"}`, not "leave the server default alone". Without this, a boot carrying --reasoning-parser answered every plain request with a leading thinking block that consumed the whole max_tokens budget, so a tool round trip never got emitted. Deliberately overrides the server-level reasoning-parser default on the Anthropic front only -- the OpenAI front reads its own chat_template_kwargs/ reasoning_effort and is untouched. Named divergence, not smoothed over: on an always-on reasoning parser the override degrades to a WARNING (serve with the model's default) rather than the 400 an explicit {"type":"disabled"} still raises, because an absent field is not a request and refusing would 400 every plain message on such a model. G2: unknown content-block types (document, mcp_tool_use, server_tool_use, web_search_tool_result, and future tags) degrade PER BLOCK via a callable Discriminator with an extra="allow" catch-all, instead of 400-ing the whole conversation on the closed union's first unmodelled tag -- malformed KNOWN tags keep their precise validation error, this is not a catch-all for those. G3: stop_reason "stop_sequence" + stop_sequence populated from the backend's matched_stop, both streaming and non-streaming, only when the matched string is one the caller actually asked for. G4: message_start ships before the backend produces anything, message_delta carries corrected input_tokens, ping frames go out every PING_INTERVAL_SECONDS through a task-based read that neither polls nor drops chunks and cancels cleanly on disconnect. G5: outgoing tool_use ids normalised to toolu_, inbound ids never rewritten. G6: redacted_thinking in history skipped with a warning instead of raising. G7: message_start.message carries explicit stop_reason/stop_sequence nulls. Still deliberately absent: /v1/messages/batches, anthropic-beta headers, Anthropic server-tool execution. Tests: new test_conformance_http.py drives the real FastAPI app through TestClient with a mocked backend, before/after against the pre-change source: 17 failed / 7 passed -> 20 passed (+4 subtests) -- every gap has at least one arm that fails on the old tree; the four rows that pass on both sides are labelled guards in the ticket, not evidence. test_serving.py stays at 56 passing with four cases retargeted to the changed behaviour. Hermetic only: CUDA_VISIBLE_DEVICES=99, mocked backend, no model load. The prediction that a real claude CLI no longer needs MAX_THINKING_TOKENS=0 on a --reasoning-parser boot is UNMEASURED here and named as such in the ticket -- G1 takes effect on the next boot, not the live one (per instruction, the live server was not touched by this verification). Verification: test/registered/unit/entrypoints/anthropic/ together -- 76 passed, 9 subtests, 0 failed (20 + 56, matching the commit's own numbers exactly). ruff --select=F401,F821,UP037 and codespell clean on all 6 touched files. All 17 catalog sections and every previously tracked additive paragraph verified intact. Live serving (30030) and the router process (PID 37489) confirmed untouched throughout.
efschu
added a commit
to efschu/htsglang
that referenced
this pull request
Aug 4, 2026
… the local server (sgl-project#540) Two commits on top of the conformance merge (this branch's true base is exactly that commit -- zero drift beyond it), clean auto-merge including a second mid-paragraph FEATURE_CATALOG.md splice. Claude Code binds its endpoint per process (ANTHROPIC_BASE_URL and siblings read once at startup; the subagent frontmatter schema carries no baseUrl/provider/env key), so no in-client setting keeps a session's parent turns on api.anthropic.com while one subagent runs on the rig. local_model_agent.sh's whole-process move is the fallback, not the feature this branch builds. python/sglang/srt/entrypoints/anthropic/router.py listens on 127.0.0.1:30099 and forwards every request verbatim (path, query, method, all headers including the bearer, response bytes undecompressed, SSE streamed) to api.anthropic.com EXCEPT requests whose model is in --local-model, which go to 30030. Routing key exists because Claude Code passes --agents' "model" string to the wire unvalidated, so naming a local id in an agent definition is the whole binding; with no -m the id resolves from GET /v1/models, so the router follows a checkpoint switch rather than a hardcoded name. No header value is logged at any level. One body edit, framed correctly as a compatibility shim rather than a mechanism: "thinking":{"type":"disabled"} is filled in on locally-routed /v1/messages bodies that omit the field -- never rewriting an explicit value, never touching upstream traffic or count_tokens, and a NO-OP by construction once the serving process carries the absent-means-disabled front fix from the sibling conformance merge, since it only ever writes what the front now defaults to (--no-thinking-shim disables it). Own defect found by driving the router rather than reading it, fixed in the second commit: Accept-Encoding is now pinned to identity when the client omits it. The response body is forwarded undecompressed, so aiohttp adding its own "gzip, deflate" made the first version hand a gzipped body to a client that never advertised gzip -- a plain curl got binary garbage where the error envelope belonged. A client that DOES send the header keeps its own value. Two tests pin both directions; the absent-header test's first version failed because aiohttp's own test client adds the header, which is why it now uses skip_auto_headers. LIVE-BOOT PROOF, unlike the sibling conformance merge's hermetic-only verification: a real claude -p 2.1.221 was driven through the router against the live 30030 boot in a separate process, parent session and server untouched. The subagent returned a marker it could only get through a Read round trip, sglang:generation_tokens_total{priority="0"} on 30030 moved 14820 -> 14926 (+106), and the router's own decision log shows the split in order: two parent turns on claude-fable-5 upstream, two Qwen3.6-27B turns local (tool_use then tool_result), parent's closing turn upstream. Same run measured why the shim exists against the not-yet-restarted live boot: the identical body sent direct to 30030 without a thinking field spent its whole 40-token budget on a thinking block (stop_reason max_tokens, zero text) -- through the router it answered cleanly. That gap closes the moment 30030 restarts onto the conformance fix, which is exactly what makes the shim a no-op-by-construction bridge rather than a permanent mechanism. Tests: test_router.py, 19 hermetic tests (two mock aiohttp backends standing in for api.anthropic.com and the local front, nothing real touched), mutation-checked -- dropping the shim assignment fails 1, forcing everything upstream fails 10. FEATURE_CATALOG.md: second mid-paragraph splice into the existing "local checkpoint as a subagent backend" entry (sgl-project#530/sgl-project#531 area), applied cleanly since nothing on this line touched that text since the conformance merge landed. All 17 sections and every previously tracked additive paragraph verified intact, including the conformance merge's own new paragraph from the immediately preceding commit. Verification: test/registered/unit/entrypoints/anthropic/ together -- 95 passed, 9 subtests, 0 failed, matching the reported number exactly (20 conformance + 56 serving + 19 router). test/registered/unit/ model_loader/, BOTH wheel states (default and SGLANG_GGUF_MXFP4_NATIVE=0): IDENTICAL both times, 341 passed, 0 failed, 15 skipped, 67 subtests passed. ruff --select=F401,F821,UP037 and codespell clean on all touched files. bash -n on claude_local_router.sh: syntax OK. Live serving (30030, unchanged PID) and the router process (PID 37489) confirmed untouched throughout -- neither was restarted or reconfigured by this verification.
efschu
pushed a commit
to efschu/htsglang
that referenced
this pull request
Aug 4, 2026
…two findings
Booted 2026-08-04T11:25Z, green. Server up 55 s after launch; serving
pgid stopped with no orphans; translator PID 30439 untouched throughout.
Live config: hicache file backend, ratio 2, page_first_direct + direct,
max_size 100Gi / min_free_space 20Gi, chat_template_default_kwargs
{'preserve_thinking': true}, ctx 262144, NEXTN, kvso False.
Validation:
* disk tier ACTIVE -- files under /spinning/hicache 381 -> 12270, 271 MB
written; storage backend 'file' created on all three ranks. This is the
only available proof: hicache emits no Prometheus series at all.
* short-context sanity correct ('Lisbon, 391').
* preserve_thinking kwarg has effect -- turn-2 prefix reuse 77.2 % vs
6.4 % between variants.
* VRAM corridor held: min free 3009/3577/3013 MiB over 100 ms sampling.
* host RAM anon 18.8 + shmem 36.7 = 55.5 GB non-reclaimable of 98 GB.
Two findings for the owning tickets:
* sgl-project#540: the overshoot bound is understated. Measured 6/9/6 tokens at
budgets 64/128/256 against a stated '<= draft_token_num' of 4. The
closing marker is itself 1-3 tokens and is counted into
reasoning_tokens, on top of the 4-token NEXTN verify granularity, so
the bound should read draft_token_num + marker_tokens. Not a blocker.
* sgl-project#544: the preserve_thinking spread is INVERTED against the probe's own
documented mechanism -- preserving thinking should raise turn-2 reuse
and instead lowered it. The discriminator fires, so the kwarg reaches
the template, but the direction needs resolving before the reuse figure
is quoted as a benefit.
Also fixed two artifacts in the validation script itself: a 60-token cap
that starved the sanity answer behind the thinking block, and a quoting
bug in the section-1 config dump.
efschu
added a commit
to efschu/htsglang
that referenced
this pull request
Aug 4, 2026
…s gone, the cost is real Serving was restarted between phases: pgid 115747, 100 GB disk HiCache on the file backend, preserve_thinking as a chat-template default, sgl-project#540 live. All four facts were read out of /get_server_info before launch rather than taken on report, and the thinking mechanism was re-proven on the new boot because sgl-project#540 inverts what an absent thinking field means -- absent now answers in 4 tokens of plain text where the old boot spent the whole budget on a thinking block. Three of a planned 24 runs before wind-down, but they settle the question phase 1 could not. Prefix reuse is now 66.9 % in arm A against 62.9 % in arm B, a four-point gap where phase 1 had eight points at a far lower level. With reuse matched the arm difference is finally readable, and on the one complete pair it is large: 2.5x wall time, 3.7x generated tokens and 1.75x turns for identical, flawless quality -- both arms 10/10 modules, 94 verified interface names, zero wrong claims. Only 4758 of arm B's 14675 tokens are thinking; the rest is ordinary output, so thinking did not add a reasoning surcharge, it made the agent take more turns and write more with nothing to show for it. Arm B's behaviour on the same task changed sharply across boots (134 s / 3132 generated in phase 1, 485 s / 14675 now). preserve_thinking keeping prior reasoning in context, inviting more reasoning each turn, is the plausible mechanism -- recorded as a hypothesis, since it rests on one pair per phase. What it does not settle is written down as plainly: n=1 per arm, the phase-1 noise floor was not re-measured on this boot and must not be assumed smaller, T2 flipped from 578 s success to a 600 s DNF with no arm involved, co-tenant traffic was live during the runs, and the coordinator's inverted preserve_thinking probe is unresolved. Also recorded: a run whose status file lagged its own process exit by about two minutes. It was recovered intact from its 860 KB stream transcript, so a run is not safe to declare missing on an absent status file -- the transcript is the authority. Phase-2 ordering is rep-round-robin in battery2.sh, so a stop leaves full task x arm coverage instead of losing one arm entirely as phase 1 did. codespell clean.
efschu
added a commit
to efschu/htsglang
that referenced
this pull request
Aug 4, 2026
efschu
added a commit
to efschu/htsglang
that referenced
this pull request
Aug 4, 2026
efschu
added a commit
to efschu/htsglang
that referenced
this pull request
Aug 17, 2026
…ctor guards active State of the tool-call argument-loss fix in THIS tree, recorded so the gap is discoverable from the log rather than only from the ticket. LANDED: the qwen3_coder detector guards (7a9e478, 0e0f31b) -- _is_known_tool and the rejected_func_name path. 174 detector tests pass. NOT LANDED: the Anthropic adapter fix (fc0cc57). It calls _convert_response(response, stop_sequences=...), a signature that only exists after sgl-project#540 (cb9a76c), and the change is a 360-line deferred-content state machine rather than a separable hunk. Hand-carrying it here, untestable without sgl-project#540's tests and in the exact path where silent argument loss is the bug, would be re-deriving a different fix rather than backporting this one. CONSEQUENCE: "Dropping tool_call argument delta with no open tool_use block" can still fire in this tree's anthropic/serving.py. The detector half means the failure is LOUD rather than silent. Deferred by operator decision until the regular merge train brings sgl-project#540 naturally; the deploy tree carries the full fix.
efschu
added a commit
to efschu/htsglang
that referenced
this pull request
Aug 17, 2026
…ctor guards active Same state as the htsglang-gpu tree, recorded here for discoverability. LANDED: qwen3_coder detector guards (7a9e478, 0e0f31b). 174 tests pass. NOT LANDED: the Anthropic adapter fix (fc0cc57) -- it calls _convert_response(response, stop_sequences=...), which only exists after sgl-project#540 (cb9a76c), and is a 360-line state machine rather than a separable hunk. CONSEQUENCE: "Dropping tool_call argument delta with no open tool_use block" can still fire in this tree's anthropic/serving.py; the detector half makes the failure loud rather than silent. Deferred by operator decision pending the regular merge train. Note also: this branch was published separately because the local feature/uneven-tp is 77 ahead / 74 behind origin -- a PRE-EXISTING divergence, not introduced here. Resolving it needs a force-push, which is a user decision.
efschu
added a commit
to efschu/htsglang
that referenced
this pull request
Aug 17, 2026
…and cache_read_input_tokens without the absent-vs-0 ambiguity
GAP 1 -- chat_template_kwargs were SILENTLY DROPPED. The Anthropic adapter
converts into an OpenAI ChatCompletionRequest and delegates
(serving.py:_convert_to_chat_completion_request -> self.openai_serving_chat).
The OpenAI front has carried chat_template_kwargs all along
(openai/protocol.py:844), but AnthropicMessagesRequest declared no such field
and sets no model_config, so pydantic's default extra="ignore" applied: the
caller's kwargs vanished with no error. Rejecting would at least have been
visible.
Fix: declare the field, and set request_data["chat_template_kwargs"] only when
present -- an always-present {} reads downstream as "the caller specified no
kwargs" rather than "the caller said nothing", and templates that branch on
the dict's presence tell those apart.
SEMANTICS MIRRORED, NOT INVENTED, as briefed. apply_reasoning_enabled
(openai/serving_chat.py:1823-1825) already MERGES into whatever the request
carries and overrides only the reasoning toggle, so a caller's unrelated keys
survive while Anthropic's typed `thinking` stays authoritative over the toggle
itself. The stamp is placed BEFORE construction so that merge sees it. The
merge shape is pinned BY SOURCE so a future change to the OpenAI write side
cannot silently start clobbering Anthropic callers' kwargs.
GAP 2 -- cache_read_input_tokens was already mapped, and from the right source:
_cached_prompt_tokens reads usage.prompt_tokens_details.cached_tokens, the real
count, NOT the broken cache_hit_rate. The defect was narrower: the field was
written under `if cached_tokens:`, falsy at 0, so a request that simply got no
cache hit omitted it and a client could not tell "no cache hit" from "this
server does not report cache usage".
AND THE CURE IS NOT "ALWAYS EMIT A NUMBER". Fixing it that way broke an
existing pin (anthropic/test_serving.py:580) which requires the field ABSENT
when the usage object carries no prompt_tokens_details -- and that pin is
right. A backend that sent no details reported nothing; answering 0 would
publish a measurement never taken and convert "unknown" into "definitely no
cache". That is the defaulted-measurement defect (sgl-project#606), which this session
has already refused twice elsewhere.
So the mapping is three-way, via a new _reported_cached_tokens:
details present, cached > 0 -> that number
details present, cached == 0 -> 0 (a MEASURED miss; the ambiguity the
brief targets, removed)
no details at all -> absent (nothing was reported)
_cached_prompt_tokens keeps returning an int because the input-token
arithmetic needs one; the reporting side is where unknown and zero differ.
sgl-project#710 ADJACENCY (item 3): DISJOINT BY FILE, and sgl-project#540 is not touched or worked
around. This diff is entrypoints/anthropic/{protocol.py,serving.py} only; the
sgl-project#710-deferred adapter half is srt/function_call/qwen3_coder_detector.py
(landed guards 7a9e478, 0e0f31b; signature proof blocked on sgl-project#540). No
overlap in file or function.
Tests, hermetic (CUDA_VISIBLE_DEVICES="", no server contacted, fake engine
usage objects, --color=no):
test/registered/unit/entrypoints/test_anthropic_557.py 11 passed
RED FIRST: 5 of 10 failed before the fixes
MUTATION PROOF: reverting both fixes turns 3 pins red
test_anthropic_557 + entrypoints/anthropic/ 124 passed, 9 subtests
test/registered/unit/entrypoints/ 4 failed / 436 passed / 3 errors --
IDENTICAL failure set to the baseline WITHOUT my file (4 failed / 425
passed / 3 errors), i.e. no regressions; the CORS failures are ordering
pollution that pre-exists (that file passes 29/29 alone).
ruff + codespell clean.
efschu
pushed a commit
to efschu/htsglang
that referenced
this pull request
Aug 17, 2026
…ip named Pass 2's state was unverified after the process-exit waves, so this pass began by CHECKING every worklist item against the tip rather than by merging. Five of eight were already on the train, verified with merge-base --is-ancestor rather than assumed: feat/407-registry-reconcile (ahead=0) + docs/407 + VERDICT_407 present the two DESIGN_407 corrections filed under sgl-project#732 -- both committed fix/485-gdn-family-report (ahead=0) feat/363-remainder (ahead=0) <- the worklist flagged this MISSING. STALE. fix/602-fill-side (ahead=0) the sgl-project#710 adapter item -- the named site carries the repair, from sgl-project#540 Merged (all clean, zero conflicts): origin/train/0817-desk -- sgl-project#737 ack drain, sgl-project#734 dead-peer discriminator, sgl-project#721 help text, and sgl-project#738 direct-io which F4-r4 pushed during the pass, resolving that item feat/516-miss-slot-budget feat/553-remainder fix/739-prefill-progress-signal Plus sgl-project#748 shipped ON the train before the freeze: my sgl-project#744 armed-only gate strangled the flip's own funder (35 refused tp_to_pp, IDLE-LOCK at 407,622 tokens pending), and the review boot must not carry the unrefined gate. TEST EVIDENCE, per-suite and compared by FAILED/ERROR line rather than total: baseline before any merge 57 failed, 4 errors, 5510 passed after the three main merges 57 failed, 4 errors, 5575 passed new failures ZERO, disappeared ZERO Pinned suites after sgl-project#748: 142 passed + 87 subtests. ONE FINDING RECORDED RATHER THAN RE-RUN AWAY. Three later full-scope runs showed ~50 extra failures in the distributed/ collective-floor family, and the obvious suspect was the last merge. sgl-project#739 is EXONERATED by a same-commit contradiction: commit 3c49cbc, the tree BEFORE sgl-project#739, was run twice on the identical scope -- once ZERO new, once FIFTY. Same commit, same command, opposite results. Corroborated: the suites pass in isolation, pairing each new suite with a victim stays green, and distributed/ alone gives 27 rather than 27+50. So the combined run is order-dependent at ~50 tests on this lineage: a test-infrastructure defect worth its own ticket, not a property of this train. A suite that gives fifty different answers on one commit cannot gate anything, and the tempting move -- re-running until it looked green -- would have buried that. NOT on the train: Slot-2's sgl-project#747, which arrived after the freeze. Nothing else was withheld; every worklist item is merged or verified present.
efschu
added a commit
to efschu/htsglang
that referenced
this pull request
Aug 18, 2026
…ntained; the per-arm live probe rides the harvest boot Prior-art verdict on the re-issued remedy: 57b04b2 (branch fix/540-effort-collapse, held by its owner's worktree -- not touched) already ships the fix and is an ancestor of comp4. Default xhigh passes through verbatim, the OpenAI Literal gained xhigh, the Qwen3.8 template accepts it explicitly (500s are on explicit high/max only), and the collapse survives strictly as the logged opt-in SGLANG_ANTHROPIC_XHIGH_EFFORT. The remedy differs from the re-issue's sketch (pass-through rather than map-to-omit) and is the BETTER shape: explicit xhigh is a supported template arm, so nothing needs rewriting at all -- 'never map into a known-refusing arm' holds with zero rewrites. 8-test suite re-run green on comp4. Live state verified read-only: the running router (30099) already normalizes efforts onto the omit-encoding (its own module doc + code, wt-anthropic-front), so live traffic was protected at the router layer all along; the running serving lineage (wt-merge-r4, currently DOWN, health 000) still carries the old collapse at serving.py:730-739 and is retired by deployment. The one-real-request-per-arm probe could not run against a down backend (queueing blind generates into the router's hold buffer serves nothing) -- deferred honestly as a WINDOW_LADDER phase-1 line with expected outcomes per arm.
efschu
added a commit
to efschu/htsglang
that referenced
this pull request
Aug 18, 2026
…gl-project#754 retires into the 753 fold, 13-step plan re-smoked clean The first map froze before today's second wave; new authority is F4-r5's harvest composite 59ce2d8 (declared COMPLETE, review tip still an ancestor). Pass 3 redefined: harvest tip = train base, unabsorbed branches cherry-pick on top, feat/753 lands FIRST by its owner (10 in-flight commits; carries sgl-project#749; folds sgl-project#754 at the same seam -- distributed/utils.py:1709, its own pp_size=1 handling). Sweep results, same git-cherry/merge-base rigor as the first map, outputs quoted in the ledger REFRESH section: - ABSORBED by ancestry: comp4 and its whole lineage, 915ce1b (F4-r5's own sgl-project#757), 57b04b2 (sgl-project#540 fix). - ABSORBED as different commits (desk-sgl-project#752 hazard class, never merge): fix/748-armed-gate-scope, fix/759-arming-economy, feat/755-slot-reorder. The sgl-project#758 emitters need no branch -- the harvest TIP ITSELF is a sgl-project#758 commit. - SUPERSEDED: my own fix/754 -- semantic-not-patch folded by 753 (git cherry vs 082293f shows '+'); merging it after 753 lands guarantees a get_pp_layer_set conflict with zero gain. Retired from the plan without regret. - REVIEW-never-merge: 9e56477 (independent sgl-project#757), per its reviewer's own in-composite note naming 915ce1b as the baseline. - fix/706-remainder not yet visible; slot reserved. Executor updated: HARVEST constant joins the lineage check, DEFAULT_TIP moves to the harvest tip, the sgl-project#754 step is replaced by the sgl-project#745 reachability pick, and the second-wave picks join (727 head-chain, sgl-project#738 verdict, sgl-project#535 tickets). Dry-run scratch smoke against the REAL harvest tip: all 13 steps complete with ZERO conflicts (exit 0) -- cleaner than the first wave; the sgl-project#740 pair ordering from the previous smoke holds. Plan-mirror test updated (12 passed). Gate unchanged: COMP4_ACCEPTED still required, nothing pushes, nothing booted.
5 tasks
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
No description provided.