Skip to content

Higher priority for user input of max_prefill_tokens & format - #540

Merged
Ying1123 merged 2 commits into
mainfrom
ying_priority
Jun 13, 2024
Merged

Ying1123 merged 2 commits into
mainfrom
ying_priority

Conversation

@Ying1123

Copy link
Copy Markdown
Contributor

No description provided.

@Ying1123
Ying1123 merged commit fb9296f into main Jun 13, 2024
@Ying1123
Ying1123 deleted the ying_priority branch June 13, 2024 04:48
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
…ject#540)

* Copy OSS code from 5e1a495 on 20251222

* fix phnx.

* resolve qwen25 vl loading.

* resolve qwen3 vl loading

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Jue Wang <zjuwangjue@gmail.com>
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 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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant