Measured: CLAUDE_CODE_AUTO_COMPACT_WINDOW beats --autocompact, so fleetd.yaml's comment is backwards #618
Open
opened 2026-09-22 05:41:20 +02:00 by ltms
·
2 comments
No Branch/Tag Specified
main
worker/fleetd-612-unita-87807e-1
worker/612-b3-mcpwirings-da2b58-3
worker/612-b2-cb185-176d3a-2
worker/612-b1-completion-457459-1
worker/612-agaps-73a926-2
worker/608-sleeps-3a64ff-3
worker/621-b4520b-1
worker/618-b83894-2
worker/fleetd-615-e05481-5
worker/lead-autocompact-5f1ab2-3
worker/fleetd-613-f85deb-3
worker/fleetd-608-flaky-nudge-test-d0c2d1-3
worker/lead-context-gauge-ad404f-1
worker/gauge-wiring-9158c1-4
worker/redeploy-slowstart-ead0e5-5
worker/charter-bytes-13668c-6
worker/rollover-outcome-291483-2
worker/589-f64303-2
worker/593-1a8025-5
worker/589-fcd2aa-1
worker/568-9fdaa2-3
worker/571-attempted-outcome-5739f7-2
worker/581-completionresolver-cas-sites-0542b7-6
worker/562-loop-health-wiring-test-99611c-5
worker/562-surface-loop-health-7df5cc-4
worker/575-waiter-cleanup-sites-62ad80-1
worker/572-answer-lock-release-46a9ae-5
worker/567-probe-channel-leak-a38fc5-6
worker/551-record-before-send-7cbf56-1
worker/561-listener-fanout-survives-a-throw-61d538-2
worker/555-redeploy-main-flow-seam-65c2f5-2
worker/556-injector-owns-registration-e027a5-1
worker/552-post-restart-mktemp-abort-bc2672-4
worker/553-onstatus-completion-leak-0da881-2
worker/550-shasum-linux-196132-1
worker/538-loop-dies-on-error-4a5eeb-6
worker/426-health-coverage-ef1fd4-4
worker/504-failed-reported-clean-3cfd66-3
worker/537-capturedlog-close-e4c437-2
worker/459-broken-link-targets-cadc17-5
worker/535-appender-leak-fe74c1-1
worker/512-part2-shutdown-detection-434701-9
worker/529-logger-level-sweep-2a5533-8
worker/528-drain-gate-call-site-5de83d-7
charter/forge-mcp-vs-token
worker/521-swap-guard-unpinned-28e931-5
worker/519-probe-test-harness-d25ab8-4
worker/525-logger-level-leak-1b4eb0-6
worker/518-fleetmcp-resolver-wiring-8ef96c-1
worker/512-drain-complete-line-7edd71-3
worker/517-abort-branch-and-jar-id-41b641-2
worker/500-9e52c9-3
worker/509-4912f4-2
worker/511-9a4b23-1
worker/493-479f45-2
worker/505-03f8b2-1
worker/492-followup-detect-unclear
worker/501-a31fa0-7
worker/498-451d1c-5
worker/494-1015ce-2
worker/492-209647-1
worker/489-001902-2
worker/480-relative-handover-path-906323-1
worker/480-b-handover-skill-45bf1f-5
worker/474-followup-source-pin-f54a55-17
worker/474-charter-check-on-reload-f54a55-17
worker/466-quarantine-repeatcount-report
worker/393-opencode-skill-seeding-71854b-13
worker/469-canonical-tool-names-2a472a-16
worker/466-quarantine-escalation-5ae9c1-15
worker/446-hot-exhausted-pattern-0af580-6
worker/464-charter-tool-name-guard-a85635-12
worker/463-listfleet-default-fails-open-f1c76c-11
worker/458-invariant-5-by-purpose-862f9a-10
worker/439-coordinator-row-gate-bc032a-8
worker/449-herdr-protocol-576015-4
worker/450-abstract-spawn-599e1c-5
worker/437-ack-refuses-177d91-1
worker/444-placement-window-feb56a-2
worker/440-helddurable-derived-d462d7-13
worker/425-rework-placement-resolve-c58ba1-9
worker/421-lead-peek-held-msgs-cdbad2-10
worker/435-fixed-policy-cap-fe11de-12
worker/422-gate-state-observability-9e79d6-11
worker/431-memberregistry-live-readers-cdbad2-10
worker/424-architect-slot-hot-038b41-7
worker/422-model-gate-spawn-c29f48-6
worker/425-default-profile-live-f55534-8
worker/415-coverage-wording-2cbf9c-5
worker/416-3ad1da-1
worker/418-588283-3
worker/deterministic-stamp-race-409-3cb7b6-10
worker/armed-reads-live-config-404-ed931f-9
worker/reply-peer-refusal-391-5a34bd-7
worker/models-allowlist-aa9e9b-3
worker/ttl-stamp-race-399-f1122f-8
worker/scrub-receipt-400-316b3e-5
worker/exhaustion-detection-395-105105-6
worker/scrub-abort-394-316b3e-5
fix/scrub-uid-abort
worker/task-scrub-517574-2
worker/t386-clock-bd5b78-4
worker/t384-scrub-813790-5
worker/t381-cc-748314-2
worker/t373-336973-2
worker/t365-3920c5-3
worker/t358-6e989b-1
worker/t355-8b321c-1
worker/fleetd-369-hermetic-git-tests-e8b19a-3
worker/fleetd-368-stale-lead-binding-f5682e-2
worker/fleetd-360-deploy-units-0d3793-1
worker/359-dead-lead-tabs-f1253b-4
worker/362-worktree-skills-c03e51-3
worker/361-coord-visibility-655144-1
362-plugin-visibility-and-drift
worker/errscan-bed2ca-2
worker/amqp-log-identity-bed2ca-2
worker/withdefaults-guard-561704
worker/sleepguard-82076d-1
worker/fd334-9ee1b6-5
worker/fd348-f1ab27-4
worker/fd335-a71c35-1
worker/fd342-174a17-2
worker/fd345-490d0f-3
worker/fleetd-337-5ec7d4-21
worker/fleetd-341-af5a6b-24
worker/fleetd-339-5ca0a2-23
worker/fleetd-338-83a4a1-22
worker/fleetd-333-281f46-18
worker/fleetd-329-11bdbb-16
worker/fleetd-330-2770fb-17
worker/fix-326-50506e-15
worker/fix-324-3e9bbf-14
worker/fix-323-b8287d-13
worker/fix-316b-bd0860-11
worker/fix-318-76ca36-9
worker/fix-317-486aec-8
worker/fix-315-ce47c5-6
worker/fix-307-275890-6
worker/fix-308-b4f664-7
worker/fix-309-ec3939-8
worker/fix-310-7a3974-9
worker/fix-302-52ad0e-9
worker/fix-298-ce1acb-8
worker/fix-297-66bd11-7
worker/fix-296-104622-6
worker/fix-293-bare-closetab-eb22b5-3
worker/fix-280-gone-ask-lapse-bca98e-2
worker/fix-290-reapidle-guard-coverage-9b0dd1-1
worker/fix-285-trust-seed-8f3565-10
worker/fix-284-backend-error-seat-85912c-11
worker/fix-282-chained-ask-e6d0bb-8
worker/fix-283-teardown-leaks-f40dfa-9
worker/fix-281-pin-handler-actions-4921ac-7
worker/audit-rendezvous-lifecycle-d072ae-2
worker/audit-health-placement-1a2476-6
worker/audit-teardown-exits-e207a5-3
worker/audit-launcher-asymmetry-27e370-4
worker/audit-rest-authz-6ca53c-5
worker/investigate-275-abandon-asking-fdef52-8
worker/fix-274-worktree-leak-b0095d-7
worker/fix-273-exhausted-pattern-9665b5-6
worker/fleetd-267-model-check-bd8068-1
worker/fleetd-131-archunit-18b834-7
worker/fleetd-266-sshagent-rename-a014ff-6
worker/fleetd-184-uid-claim-8e1f31-4
worker/fleetd-184-warn-b381ee-10
worker/fleetd-184-docs-be1d12-9
worker/fleetd-257-9bf010-7
worker/fleetd-103-23a113-6
worker/fleetd-247-342356-5
worker/fleetd-116-04dea8-4
worker/fleetd-252-a830e0-3
worker/fleetd-111-7e8673-9
worker/fleetd-155c-f8ef4b-8
worker/fleetd-176-b928ca-3
worker/fleetd-249-7a7878-2
worker/cb248-composition-root-b-9acdf7-15
worker/cb148-envrc-default-fa6c82-12
worker/cb201-unit5-wiring-6c12e6-8
worker/cb241-fallback-echo-1175e9-11
worker/cb149-trust-dialog-2392a5-9
worker/cb134-148-overlay-visible-c9b986-10
worker/cb234-session-id-keyed-04e1fc-1
worker/cb201-unit3-nudge-abdf5c-6
worker/cb201-unit2-policy-c1102c-5
worker/cb201-unit4-outcome-a13bfa-7
worker/cb201-unit1-classifier-91b9b1-4
worker/cb201-227-refine-831980-3
worker/cb175-model-readback-0f085f-1
worker/cb222-charter-tmpdir-17f013-1
worker/cb226-architect-slot-race-cd3aa8-3
worker/cb224-worktree-root-group-024523-2
worker/cb-123-role-demotion-c600f7-2
worker/cb-219-opencode-roots-1f677e-1
worker/cb214-claude-session-id-b9eab4-4
worker/cb213-zdotdir-wrong-process-dd6de4-3
worker/cb211-exhaustion-classification-9546e0-2
worker/cb137-ambiguous-task-4df3d8-4
worker/cb209-agentsessionid-4dfdb6-2
worker/cb185-hostenvnames-2692b5-3
worker/cb206-opencode-sqlite-128718-2
worker/cb185-worktree-group-fc0c99-1
worker/cb-137-ask-ticket-e7760c-2
worker/cb-172-broker-uri-d36ae4-4
worker/cb-175-model-readback-76ead6-3
worker/cb-161-pane-ancestry-293510-1
worker/cb-164-rebase-885863-8
worker/cb-164-empty-scrape-false-success-1a80af-3
fix/cb-197-ticket-ttl-from-completion
worker/cb-189-remote-url-coverage-4692f3-1
worker/cb-185-blockers-027756-4
worker/cb-192-gap-log-11b631-2
worker/cb-633-fix-5f4396-3
worker/cb185-router-d6436d-3
worker/cb185-router-routing-gaps-9e9d33-3
worker/cb185-paneids-992586-2
worker/cb-633-allow-list-union-ed374b-1
worker/cb-157-credential-in-remote-url-496e44-2
worker/cb-641-health-herdr-evidence-8f1f54-6
worker/cb-640-health-msg-evidence-99c9cd-1
worker/cb-642-fleets-status-skill-bbbc40-5
cb-634-ide-mcp
worker/lead-comms-wiring-c014b9-7
worker/lead-mailbox-c19577-6
worker/autocompact-window-82bc2f-5
worker/cb-634-probe-18056f-4
worker/cb635-broker-urienv
worker/cb-632-config-retry-8e0efa-7
lead/cb-622e-claude-md
lead/cb-622-followup
worker/cb-622a-165dff-1
lead/cb-622d-opencode-mount
worker/cb-622b-717c67-2
worker/cb-622c-ab7759-3
worker/cb-617b2-20ca4b-3
worker/cb-617a-5c2f4a-1
worker/cb596-4e49ef-3
worker/cb586-10500c-1
worker/cb-606-b9343a-25
worker/cb604-1445f8-24
worker/cb582-477374-21
worker/cb584-8c2281-22
worker/cb600-e6b9a9-20
worker/cb602-ce257f-19
worker/cb601-b42837-18
worker/cb598-6c7ba7-17
worker/cb599-740fe4-16
worker/cb597-282224-15
worker/cb590fix-185e9a-10
worker/cb528-recovery-race
worker/cb594-96bead-8
worker/cb590-916766-2
worker/cb527-997d99-3
worker/cb592-env-leak-3cbf9c-1
worker/cb588-async-ticket-nudge-3218f7-5
worker/cb578b-9dcb13-6
worker/cb581-d24826-5
worker/m2-u5-ef8c42-15
worker/cb578a-516499-2
worker/cb576-01a04b-17
worker/cb579-lead-tab-acba06-20
worker/cb580-terminal-health-ed6058-21
worker/cb577-f36fdc-18
worker/cb573b-3db06f-16
worker/cb568c-f36fdc-18
worker/cb568-drop-cause-c3ac1c
worker/cb575-cancelled-notification-c3ac1c
worker/m4-sol-a2cbec-3
worker/cb574-async-ask-c3ac1c
worker/cb573-health-model-8ca857-14
worker/cb572-unknown-target-7f2e35-13
worker/u4-700706-9
worker/u3-b9fcb6-6
worker/u2-ef5b68-4
worker/u1-469dce-1-clean
worker/u1-469dce-1
worker/cb-564-health-events-70cf7e-2
worker/cb-565-recycle-drops-role-98e58f-3
worker/cb-563-missing-reply-df2866-1
worker/cb-562-readiness-gate-silent-6c23c9-3
worker/cb-560-architect-presence-da8155-1
worker/cb-561-architect-silent-off-a71cab-2
worker/cb-548-bind-architect-slot-fe1b8c-1
worker/parity-overlay-settings-5fb711-1
secrets-central-store
cb-559-hot-key-correction
cb-557-fleet-role-pools
worker/cb-553-maxload-explicit-spawn-305ee3-6
worker/cb-551-idle-lead-heartbeat-f1633c-1
worker/cb-544-drain-preserves-worktree-925fad-3
worker/cb-552-docs-sync-1cb9cf-4
worker/cb-548-rendezvous-guard-rebased
worker/cb-548-rendezvous-guard-116b53-10
worker/cb-548-authz-v2-586df6-8
worker/cb-548-authz-264363-5
salvage/cb-528b-codex-home
salvage/cb-528a-codex-launcher
CB-518-primary-flow
feature/peer-launcher-spi
cb-103-injector
v1.1.0
v1.0.0
Labels
Clear labels
blocked
needs-live-proof
ready-to-delegate
silent-default
Cannot start until something else lands. The body says what.
Merged and green, but never shown working on the running daemon. Not the same as done.
Scope, files and acceptance criteria are written. A worker can be briefed from the body alone.
A feature that compiles, passes tests, and ships turned off. Nine recurrences and counting.
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: fleet/fleetd#618
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The question
fleetd/fleetd.yamlsets, on four Claude Code profiles (local,local-direct,opus,sonnet),autoCompactWindow: 250000— which fleetd passes as--autocompact 250000— while the same profiles exportCLAUDE_CODE_AUTO_COMPACT_WINDOW: "300000".The repo asserted both directions as fact and neither was ever measured:
fleetd/fleetd.yaml:25and:74:# CB-636: --autocompact FLAG (outranks the env var below)ClaudeCodeArguments.withAutoCompactWindow's javadoc used to claim the env var always wins, then was rewritten to pick no side.Since #601 the daemon only warns on the conflict, so nothing was broken and nobody owned the question.
The answer: the environment variable wins
CLAUDE_CODE_AUTO_COMPACT_WINDOWoutranks--autocompact. Thefleetd.yamlcomment is backwards.Full precedence, highest first:
--autocompactdoes outrank the settings file. It does not outrank the env var.How I measured it
I read the installed CLI itself. It is a bun-compiled Mach-O binary with the JS bundle embedded:
stringsis unusable on this Mac (Xcode licence not accepted) and returns a silent empty result, so every search below usedgrep -aon the binary with a positive control (grep -ac 'Claude Code'-> 4802).Step 1 — the flag is parsed into
u.autocompact(offset 187414783):Step 2 — flag and settings file are merged, flag first (offset 187070705, function at 185100898):
So
Lo= the flag when given, otherwise the settings-file value.--autocompact autoyieldsundefined.Step 3 —
Lobecomesoptions.autoCompactWindow(offset 187103513):autoCompactWindow:Lo.Step 4 — the resolver reads the env var first and returns immediately (function
Dv, env read at offset 179283490):Step 5 —
options.autoCompactWindowis the second argumentn(call site at 194183175):The same shape appears at 179744016 (
We = Vf() ? U : void 0; Dv(He, We)). NoteVf()gates only the flag/settings argument, never the env-var branch — which can only strengthen the conclusion.Independent corroboration from the CLI's own UI strings (offsets 74706362 and 80865001), which are written by the same feature but are a different artefact from the resolver code:
What this means for this fleet, today
Every Claude Code lead and worker on the Mac host compacts at 300000 tokens (capped by the model's own maximum context window), not the 250000 the
--autocompactflag asks for. The flag has had no effect on these four profiles for as long as both values have been set.The hazard the previous lead warned about is real, and this is its direction: deleting
CLAUDE_CODE_AUTO_COMPACT_WINDOWto "resolve the conflict" would silently drop every lead and every worker from 300000 to 250000. Do not do that as tidying. If 250000 is wanted, that is a decision to make on purpose.What I did not do
I did not run a live experiment — no session was driven to its compaction threshold to watch which number fired. I read the code that runs. That is the stronger instrument for a precedence question, but it is one instrument, and it is specific to 2.1.278. A future CLI version can reorder this; the check is
Dv's first branch.Follow-ups
fleetd/fleetd.yamlcomments on lines 25, 74, 110 and 124 — they currently tell the next session the opposite of the truth. (Local file, gitignored, lead-side.)ClaudeCodeArguments.withAutoCompactWindow's javadoc — it says the precedence is unverified. It is verified now.Correction to the PR #619 brief: there is a THIRD stale spot, and my brief missed it
This is a correction to the brief, not a new unit. The brief named two places that still claim the precedence is unknown. There are three. The worker found the third and reported it without fixing it, exactly as asked.
The third spot: the method-level javadoc on
FleetConfig.warnConflictingAutoCompactWindows, at roughly lines 2243–2247, directly above thelog.warncall that PR #619 already rewrote:I read this on the PR branch myself (
git show refs/remotes/pr/619:...FleetConfig.java), so it is the state after #619's changes, not before.Why it must be fixed in this PR rather than left: #619 makes the problem worse than it found it, through no fault of the worker.
log.warnthat now says the opposite. One method, two contradictory claims, a few lines apart.ClaudeCodeArgumentsfor the open question — and that javadoc now states the measured answer. The pointer sends you somewhere that disagrees with the pointer.fleetd/fleetd.yaml's comment as evidence that the question is open. I corrected those four comments on this host earlier today. The cited evidence no longer exists.Fix: replace that one paragraph with the measured answer — the env var wins, so
autoCompactWindowis inert on a profile that sets both. Keep theClaudeCodeArgumentscross-reference; it is now a pointer to an agreeing claim rather than a contradicting one. Keep everything else in that javadoc, in particular the whole WARN-not-throw rationale in the paragraph above it, which is still correct and is #601's reasoning.This one is mine, not the worker's. My brief enumerated two call sites by name when the right instruction was "fix every place in the repo that still claims this precedence is unknown". Naming the instances instead of the property is the same mistake recorded in this repo before: an acceptance criterion that names a construct is satisfied by that construct, and stops at its edge. The worker did the right thing — it did the named scope, spotted the shape outside it, and reported it in one line without going hunting.
Follow-ups 1, 2 and 4 are done. Item 3 stays open, and it is a real decision.
1.
fleetd/fleetd.yamlcomments — done (lead, this host). The four comments on lines 25, 74, 110 and 124 said--autocompact FLAG (outranks the env var below). They now say the flag is inert, name this ticket, and warn that deleting the env var lowers the live window. The daemon re-read the file at 10:41:35 and loggedconfig reloaded, so the real parser validated the edit. The file stays gitignored and never entered git.2. The code — done, merged as
8915e40(PR #619). Three spots, not the two my brief named:ClaudeCodeArguments.withAutoCompactWindowjavadocFleetConfig.warnConflictingAutoCompactWindowsWARN text4. fleet01 — told. I had already told them the question was unmeasured, so I sent a correction with the answer, the method, and both caveats (no live experiment; specific to 2.1.278). I also told them what it means for their host: if they set both, deleting the env var lowers their live window rather than fixing anything.
What I verified myself, rather than taking from the worker
#618appears twice in each changed file, so the search can see the new text). Four hits remain and all four are the false positives the worker named — two are about--modeloutranking the environment, a different flag and a different feature.mvn clean installmyself in a scratch worktree at6cb31a1, not in the main clone:Tests run: 1877, Failures: 0, Errors: 0, Skipped: 0,BUILD SUCCESS, exit 0. That equalsmain's existing 1877, which is correct for a text-only change — no test was added, dropped or silently skipped.Item 3 is still open: is 300000 or 250000 actually wanted?
Now that the precedence is known, this is a plain decision with no unknowns left in it. The facts:
local,local-direct,opus,sonnet) setautoCompactWindow: 250000andCLAUDE_CODE_AUTO_COMPACT_WINDOW: "300000".250000has never taken effect on these profiles.So nobody has to act. The risk is only that a future session "tidies" the conflict by deleting one key without knowing which way that moves the window. The config comments now say so on the spot where that edit would be made, which is the cheapest guard available.
Not urgent, nothing is broken. Leaving this open deliberately rather than closing the ticket, since the decision has an owner-shaped hole in it and the measurement work it was filed for is complete.
One thing worth a separate look, not fixed here
LeadLauncher.java:380andClaudeCodeLauncher.java:894both assert that the--modelflag outranks the environment. That is the same shape as the claim this ticket just disproved: a precedence between a flag and an environment variable, asserted in a comment, with no measurement cited. Different flag, different feature, and out of scope here. I have not measured it and I am not claiming it is wrong — only that it is the same kind of claim, and this ticket is evidence that kind can be backwards.