Repository navigation
Description
Found by the stewardship daily model + route audit, 2026-10-27 ~09:57 CDT (manual recovery run for the daily console reads / model audit skipped by cycles 75-77).
Finding
The laptop's deployed OpenCode config (~/code/.opencode/opencode.jsonc on amd-6, which ~/.config/opencode symlinks to) is a dirty working-tree file that diverges substantially from the repo's canonical HEAD version of the same file:
- Working file: 150,114 bytes, last modified 2026-10-27 03:32 CDT.
- HEAD (
37418e56, merge PR feat(pm): Cost Explorer — ChatGPT-site parity (CAI perspective, Pareto tables, recommendations, bands, projection) #1390, 06:13 CDT): 180,072 bytes. git diff --stat: 1,093 lines changed (118 insertions, 975 deletions).
Concrete consequence already verified: the Claude-plan pause merged in PR #1316 (commit 7b7e5d36 — claude-code added to disabled_providers, config default moved to opencode-route/workhorse, because Drew put the Claude plan on the free tier) is not in effect in the deployed file: the working copy has no claude-code entry in disabled_providers, its default is claude-code/claude-haiku-5-5, and the haiku-plan route's first target is the direct claude-code/claude-haiku-5-5 leaf. Sessions placed on the laptop therefore still default to the paused Claude plan route.
Ask
Reconcile the deployed config with canonical HEAD through the normal PR flow: determine whether any working-tree-only changes are intentional (preserve them via a PR if so), then deploy the canonical file, restart/reload as needed, and verify live that disabled_providers includes claude-code and the default route is opencode-route/workhorse. Do not silently overwrite until the working-tree-only deltas are reviewed — some may be deliberate local seats.
Evidence
- Stewardship cycle log, manual recovery cycle 2026-10-27 (goal stewardship-commission-recurring-review-and-dispatch, hidden_files/cycles/CYCLE-LOG.md).
- provider-quota-registry.md MODEL AUDIT entry dated 2026-10-27 (keep-the-four-repos-healthy goal).
- Related: Automatic provider-catalog updates: scheduled enumeration, diff, and catalog PRs #1297 (automatic provider-catalog updates), Are openai-codex/chatgpt deliberately disabled? (codex proxy door question) #1317 (codex door question), Routing policy alignment: map OpenChamber routing categories to the fleet's Workhorse-first tiers + POOL MAP gates #1272 (routing policy alignment).
Acceptance criteria
- The working-tree-only deltas in the laptop's deployed
opencode.jsoncare reviewed; anything intentional is preserved through the normal PR flow, anything accidental is dropped with a note on this issue. - The canonical HEAD version of the config is deployed on the laptop and live-verified:
disabled_providersincludesclaude-code(PR feat(opencode): pause claude-code (free tier) + terra-plan door correction #1316) and the default route isopencode-route/workhorse. - A drift check or documented step exists so a deployed-config divergence of this size is noticed within a day, not by audit luck.
Activity
developing-today commentedon Oct 27, 2026
CODE-514
dezren39 commentedon Oct 27, 2026
Intake review
Fleet monitor intake pass, 2026-10-27 (repo-fleet-monitor).
Related: #1297 (automatic provider-catalog updates), #1317 (codex door question), #1272 (routing policy alignment) — all cited in the issue body. The concrete harm is already merged-but-not-live: PR #1316's Claude-plan pause.
Notes: Priority set high (monitor judgment): the live laptop config silently routes against a cost/policy decision Drew already made, and the drift is large (1,093 diff lines). Not
held/user/owned— but the fix touches Drew's laptop working tree, so the review-the-deltas step in the acceptance criteria is a hard gate, not a formality.Risks: Overwriting deliberate local seats/settings if the deploy is done blind; the issue body explicitly warns against that.
Suggested approach: diff the working file against HEAD section by section, PR anything intentional, then deploy canonical, restart/reload, and verify
disabled_providers+ default route live.dezren39 commentedon Oct 28, 2026
Prepared proposal (NOT landed) — Meta pool availability is proven; no default change needed; three fixes proposed for review
Prepared 2026-10-27 evening CDT after Drew corrected a conflation in the day's quota reporting. Evidence gathered firsthand; nothing was merged or landed under the old premise (PR #1465 was not merged and is left for its own review).
Verified today — the
metadoor works and is in use~/code/.opencode/opencode.jsonc, primary clone at main):metaprovider defined and enabled (baseURLhttps://api.meta.ai/v1); themuseprovider remains commented out per Drew's 2026-10-25 order;claude-codeis indisabled_providers(the free-tier pause IS live in the deployed config — this corrects quota-view's older claim that it was not).metaAPI key calledmuse-spark-1.3-contributordirectly → HTTP 200 with a real completion (~15:35 CDT).opencode-route/workhorsealready seatsmeta/muse-spark-1.3-contributor#xhighat weight 2 of 12. Workhorse routing decisions today: DeepSeek Flash 265, Luna 51, Sol 40, Meta 27, Haiku 2. Meta carries its designed seat — it was never configured to carry most tasks, and DeepSeek Flash high remains the default workhorse per the POOL MAP (Drew, 2026-10-25) and Decision 008.The premise correction
The Power→Maximum subscription is the assistant's own app/website plan. It is not a pool, no provider draws on it, and its usage percentage never gated any route. The day's under-use question therefore resolves at the lane and gate level, not the pool level — see the three proposals.
Proposed for review (in this issue's reconciliation scope)
/api/quotaexporter (code#1301) plus route_health/route_attempt telemetry instead of compiled views.meta/muse-spark-1.3-contributor(currently 2) via the switchboard PR — a doctrine call for Drew, not a repair. No weight change is proposed by this note.Records corrected today (dated notes, history preserved)
quota-view.md: Muse consumer summary row and detail section (the "this same Meta pool" / ≥85% phrasing is corrected; Maximum plan state recorded), Meta Model API section (probe + telemetry verification appended).provider-quota-registry.md: addendum scope-limiting the 15:31 correction note — the Maximum figures describe the assistant subscription only; the Meta pool's availability rests on its own evidence.dezren39 commentedon Oct 28, 2026
Design landed for review — OpenCode-half redesign (Drew's order, 2026-10-28)
Drew ordered: "redesign so at least half the tasks will use opencode." The design is drafted at
files/opencode-half-redesign-2026-10-28.mdin the keep-the-four-repos-healthy goal workspace. Nothing live was changed — no job body or shift instruction was edited; the proposed instruction edits are quoted in the design review thread for Drew's go-ahead, per the standing hold this issue already records.The design in one paragraph
The split happens at claim time, deterministically: a per-queue assignment ledger counts tasks in flight or executed per lane; a new claim is assigned opencode iff the opencode count is ≤ the direct count (ties to opencode), which guarantees ≥50% of assignments at every prefix — no randomness, fully replayable. For an opencode-lane task the shift stays the queue citizen (claim, revalidation, label sync, laptop worktree under
~/git/fleet/, heartbeats, verification, terminal verb) but launches one OpenCode session per task on the laptop server (attach pattern, #1344/#1363) via the #1357 helper, with the model picked by the registry POOL MAP ladder under the ≤60-min measurement gate (workhorse = DeepSeek Flash high; Meta only through themetaprovider;muse/*never; theclaude-codepause stays). The shift shepherds the session, verifies its outcome against fresh GitHub state exactly as it does for its own work today, and writes the terminal verb itself — a dead session can never evaporate a claim.Honesty mechanisms
server_unreachable,quota,saturated,laptop_load,session_failed, …): the task executes directly, the miss lands in the ledger, and because the executed count moves to the direct side, the assignment rule sends subsequent claims to opencode until the executed share recovers to ≥50% on its own.hidden_files/lane-share.json, summarised in the morning readout and the stewardship cycle log. Two consecutive days under 50% → main-chat alert + a comment here with the miss breakdown.Dependencies and rollout
laneverb inrepo-queue.py→ executor mode in the shared lane-shift instruction → keeper/babysitter binding-aware coverage for queue-spawned sessions → lane-share tally + alert → one-week pilot on the code queue only (concurrency cap 4 queue sessions) → extend to the opencode/openchamber/nix queues after a clean pilot week.Implementation issues are being filed and linked below. Risks named in the design: keeper/babysitter supervision load, quota burn rate (Go plans lapse Nov 2 / Nov 6 mid-pilot), and laptop load — each with its mitigation (concurrency cap, per-launch measurement gate,
laptop_loadfallback).dezren39 commentedon Oct 28, 2026
Implementation issues filed for the OpenCode-half redesign (in dependency order): step 0 = #1357 (attach-first helper, already open) · step 1 = #1654 (claim-time lane assignment: ledger +
laneverb) · step 2 = #1655 (shift executor mode) · step 3 = #1656 (keeper/babysitter binding-aware coverage) · step 4 = #1657 (daily lane-share measurement + below-floor alert) · step 5 = #1658 (code-queue pilot + extension to the other queues).dezren39 commentedon Oct 29, 2026
Stewardship daily model audit verification, 2026-10-29 ~06:45 CDT (cycle 120): the deployed laptop config was read directly this cycle (
~/code/.opencode/opencode.jsonc, 203,268 B, mtime 2026-10-29 05:16 CDT). The material drift this issue was filed for appears RESOLVED in the deployed file:disabled_providersnow includesclaude-code(identical 18-entry disabled set to canonical origin/main 5a34fa7), and the default model isopencode-route/workhorsewithsmall_model: opencode-route/speed— no direct claude-code leaf default remains. Residual deployed-vs-canonical difference is catalog lag only: 179 diff lines; deployed 551 models vs canonical 565 (cline-pass 15 vs 18, commandcode 87 vs 98; all other provider counts identical). Leaving open for the owning lane to confirm closure or narrow to the catalog-lag remainder.dezren39 commentedon Nov 1, 2026
🚨 Lane-share below-floor alert (code#1657)
Rolling 7-day executed share is 31.8% (floor 50%) on two consecutive days: 2026-10-30 and 2026-10-31 (America/Chicago).
Full series:
hidden_files/lane-share.jsonin the keep-the-four-repos-healthy goal workspace. This alert fires exactly once per below-floor streak.dezren39 commentedon Nov 2, 2026
Agent note — picked up (OpenChamber scheduled lane)
dezren39 commentedon Nov 2, 2026
Agent note — triage verdict: no longer reproducible (OpenChamber scheduled lane)
Evidence (probed on the laptop just now):
Closing as no-longer-reproducible. If the drift reappears, the check to re-run is: `git -C ~/git/code show origin/main:.opencode/opencode.jsonc | diff - ~/code/.opencode/opencode.jsonc`.