Commit Graph

69583 Commits

Author SHA1 Message Date
Leon-SK668
1f5c8239d7 fix(scripts): preserve emoji in request log previews (#109481)
* fix(scripts): preserve emoji in request log previews

* fix(scripts): keep mock preview standalone

* refactor(scripts): reuse UTF-16 truncation helper

Co-authored-by: Leon-SK668 <0668001470@xydigit.com>

* test(scripts): cover raw Node mock loading

Co-authored-by: Leon-SK668 <0668001470@xydigit.com>

* docs(scripts): note raw Node type stripping contract

Co-authored-by: Leon-SK668 <0668001470@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 18:49:36 -07:00
Peter Steinberger
067635cb51 fix(ui): prevent generated locale rebase conflicts (#109393)
* ci(ui): make locale refresh bot-owned

* test(ui): keep locale gate coverage scoped

* fix(ci): preserve generated PR merge policy

* fix(ci): wait for generated PR head convergence

* fix(ci): retry transient guard API failures

* fix(ci): enforce locale isolation across CI events

* fix(ci): harden generated PR publication

* fix(ci): validate release gate merge tree

* fix(ci): allow trusted main locale output
2026-07-16 18:48:20 -07:00
Peter Steinberger
172c63dc23 test: synchronize transcript completion queue (#109507) 2026-07-16 18:45:40 -07:00
ooiuuii
a82c72904a fix: block no-auth managed gateway LAN installs (#98022)
* fix: block no-auth managed gateway LAN installs

* test(gateway): cover managed install bind resolution

Co-authored-by: luyifan <al3060388206@gmail.com>

* test(gateway): drop unrelated env cleanup

* test(gateway): use synthetic token fixture

* fix(gateway): reject dynamic tailnet no-auth installs

Co-authored-by: luyifan <al3060388206@gmail.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 18:45:05 -07:00
Peter Steinberger
44b01a1e5a docs(templates): ask feature requesters whether they plan to implement (#109258) 2026-07-16 18:44:41 -07:00
Peter Steinberger
7f50fb6bfe fix(ci): validate frozen release tags 2026-07-17 02:41:05 +01:00
qingminlong
fb0346fe45 fix(read): normalize displayed line ranges for limits (#105105)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 18:38:27 -07:00
ooiuuii
71c5005d2c fix(ci): run mantis codex proof on node 24 (#100237) 2026-07-16 18:33:51 -07:00
Peter Steinberger
96b2a203ce perf(pr): accept gate-proven in-progress CI runs for landing (#109331)
* perf(pr): accept gate-proven in-progress CI runs for landing

verify-pr-hosted-gates required the whole CI run to reach completed,
but openclaw/ci-gate — the branch-protection check — needs every
selected lane and fails on any non-success, so a successful gate bound
to the run's check suite proves the merge-relevant outcome while
post-gate stragglers (timing summaries, artifact uploads) are still
running. prepare-run now accepts an in-progress run whose own gate
check succeeded, cutting one to several minutes per landing. Exact
attempt binding via check_suite id prevents a stale gate from a
previous attempt vouching for a rerun; gate proof only applies to the
exact head under verification, never recent-parent evidence.

* fix(pr): bind gate proof to the run attempt, not the check suite

Autoreview P1: check suites survive reruns, so a prior attempt's
successful gate could vouch for an in-progress rerun that has not
reached its own gate. The proof now goes through the attempt-scoped
jobs listing (filter=latest): the gate job must carry the run's own
run_attempt. Regression tests cover same-run/previous-attempt,
different-run, failed, and missing gate jobs.

* fix(pr): rely on filter=latest for gate attempt scoping

Autoreview P2: the REST list-jobs payload does not expose run_attempt,
so requiring it rejected every genuine rerun gate. loadCiGateJobs
already fetches per run with filter=latest, which scopes to the current
attempt, so a run_id match binds the gate correctly without the absent
field.

* fix(pr): declare ciGateJobs in the hosted-gates evidence typedef

* fix(pr): un-export the internal gate helper and loosen test id typing

hasSuccessfulCiGateJob is only reached through collectHostedGateEvidence,
so exporting it tripped the hard-zero deadcode gate; the new test also
typed workflow ids as number against the unknown-shaped return.

* fix(pr): bind early gate proof to the run attempt

Autoreview P1: workflow attempts share a run id and filter=latest keeps
a not-yet-rerun job's prior-attempt execution, so a partial rerun could
surface an old successful ci-gate. The REST job payload does expose
run_attempt (verified live), so fetch the attempt-specific jobs endpoint
and require the gate job's run_attempt to equal the run's.

* fix(pr): revalidate the run attempt after loading gate jobs

Autoreview P2: a rerun starting between the workflow-run snapshot and the
attempt-specific jobs fetch could return a stale prior-attempt gate. Re-read
the run after fetching its jobs and drop the evidence if the run completed or
its attempt advanced, so early proof only applies while the same attempt is
still pending.
2026-07-16 18:31:40 -07:00
mushuiyu886
9ff25ca65f fix(fleet): reject hexadecimal CPU limits (#105158)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 18:30:43 -07:00
Peter Steinberger
510cf46330 test: compact large transcript fixture (#109489) 2026-07-16 18:29:00 -07:00
xingzhou
afd0fe32c2 fix(qa-lab): preserve boundary emoji in gateway startup diagnostics (#104840)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 18:26:26 -07:00
Peter Steinberger
523c07d20e docs(agents): add correct-but-pragmatic code guidance
Two Code-section bullets: correctness on real inputs is mandatory but
over-engineering for imagined ones is a defect; extremely unlikely edge
cases are tradable for real simplification when the tradeoff is named.
2026-07-17 02:24:41 +01:00
qingminlong
d6a561e92b fix(gateway): clarify malformed call params errors (#105217)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 18:24:08 -07:00
EVA
368941ae7a feat(workspaces): add secure preview widget (#101354)
* feat(workspaces): add secure preview widget

* fix(workspaces): type preview reload assertion

* fix(workspaces): harden preview widget

* fix(workspaces): honor preview URL binding ownership

* chore(workspaces): remove unused widget exports

---------

Co-authored-by: Eva <eva@100yen.org>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 18:21:54 -07:00
Leon-SK668
8fef264f70 fix(release): preserve emoji in ClawHub error details (#108172)
* fix(release): keep ClawHub errors valid Unicode

* fix(release): keep ClawHub helper source-resolvable

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 18:20:34 -07:00
Peter Steinberger
0a19e1ed58 refactor(channels): centralize mention and group activation decisions (#109480)
* refactor(channels): adopt shared mention-gate decision; consolidate group activation

* fix(matrix): carry effective mention decision

* test(session): pin qqbot accessor migration
2026-07-16 18:15:58 -07:00
Wynne668
54f1800d2a fix(matrix): bound recovery key stdin input (#108120)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 18:14:33 -07:00
Peter Steinberger
784ede0af1 feat(system-agent): local-model viability — context cap, thinking off, route-aware timeout (#109445)
* feat: improve system agent local model viability

* fix: forward Ollama effective context cap

* fix(system-agent): keep flat 120s agent-turn budget

* fix(system-agent): keep manifests timeout helper module-local
2026-07-16 18:11:22 -07:00
Peter Steinberger
92146f9f80 refactor(talk): share audio-energy stats and speech-threshold gate across voice surfaces (#109466) 2026-07-16 18:10:26 -07:00
Peter Steinberger
0f1b0e6679 test: defer migration fixture cleanup (#109475) 2026-07-16 18:01:18 -07:00
Leon-SK668
3da3318c56 fix(audit): preserve emoji in npm registry errors (#108208)
* fix(audit): keep registry errors valid Unicode

* style(audit): format registry error boundary test

* docs(audit): document direct Node import floor

Co-authored-by: Leon-SK668 <0668001470@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 17:53:09 -07:00
Peter Steinberger
c6ebd6be34 feat(watch): inbox mascot with Always-On-safe rendering (#109365)
The watch inbox's empty and waiting surface gets a 72pt Clawd: sleepy
(nightcap and all) when nothing is waiting, thinking while the watch
waits for iPhone sync, attentive when an approval needs a decision.
The Always-On display renders a static pose so the animation loop
never runs dimmed, and the active loop is throttled to 15fps for
battery. The shared mascot gains a defaulted minimum frame interval;
mascot sources compile directly into the watch target following the
TalkWaveformView pattern.
2026-07-16 17:47:07 -07:00
Leon-SK668
56d0721eb7 fix(release): preserve emoji in cross-OS response diagnostics (#108193)
* fix(release): keep cross-OS responses valid Unicode

* style(release): format cross-OS boundary test

* fix(release): resolve UTF-16 helper in direct Node runs

* fix(release): keep cross-OS summaries UTF-16 safe

Co-authored-by: Leon-SK668 <0668001470@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 17:43:56 -07:00
Peter Steinberger
dde6af2199 fix(docs): defer localized orphan deletion 2026-07-16 20:43:06 -04:00
Peter Steinberger
edd052989b refactor(google-meet): merge host and node realtime engines behind one audio transport (#109413)
* refactor(google-meet): merge host and node realtime engines behind one audio transport

* refactor(google-meet): internalize engine helpers left test-only after realtime-node removal
2026-07-16 17:39:53 -07:00
Peter Steinberger
0136bb4dca test: shorten cron process-group timeout probe (#109457) 2026-07-16 17:37:55 -07:00
smthfoxy
eb4f3d792f fix(agents): wake top-level requester when its last parallel child settles (#99396)
* fix(agents): wake top-level requester when its last parallel child settles [AI]

A top-level session (normal chat/dashboard, not itself a subagent) that
spawns parallel subagents and waits via sessions_yield never receives the
"all descendants settled -> synthesize" wake: wakeSubagentRunAfterDescendants
only targets orchestrators with a subagent-registry run record. The parent
only sees passive per-child announces, commonly mis-tracks the outstanding
set on the final completion turn (or never hears results whose announce gave
up), and then parks until a human sends a message.

Fix: when a child reaches a terminal settle (announce delivered, give-up, or
delivery suspended) and its requester has no more descendants awaiting
settle, deliver a one-shot "all spawned subagents settled - synthesize and
deliver now" wake to the parked top-level requester through the existing
announce delivery pipeline (active requesters get it steered into the live
turn; parked ones get a new origin-routed turn).

- hasDescendantRunAwaitingSettle: early-exit drain check where a suspended final
  delivery counts as settled (suspension is terminal for automatic retries).
- maybeWakeRequesterAfterAllChildrenSettled (subagent-announce.ts): scopes
  the batch to the settling child's parallel wave (the connected component of overlapping run
  lifetimes), skips nested/cron requesters (owned by the descendant-settle
  wake), skips single delivered completions and fire-and-forget children,
  and dedupes concurrent last-sibling settles via a batch-stable
  announce idempotency key (requester-settle:<requester>:<sorted runIds>).
- Trigger fires from completeCleanupBookkeeping (all cleanup-terminal paths)
  and suspendPendingFinalDelivery, and is skipped by the suspended-delivery
  discard sweep, so the wake is outcome-independent: a child whose announce
  gave up with NO_REPLY still counts toward - and can trigger - the drain.

Companion to the nested-orchestrator wake; covers the top-level case it
left open.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rukuut98qvDwzSwMp3u4kN

* fix(agents): retry the requester settle wake on transient turn failures [AI]

The settle wake is the only event that ever fires after a fan-out drains, so
a wake turn lost to a transient infra failure re-parked the requester
permanently. Observed live: the wake turn survived dispatch, reconciled all
investigators, and then died to a provider stream stall (LLM idle timeout)
mid-synthesis — with nothing left to retry it.

Bounded recovery: up to 3 attempts with 30s/120s backoff. Each retry uses a
fresh `:retry-N` idempotency suffix because the gateway dedupe caches
terminal run outcomes per key, so re-dispatching the same key would no-op. A
legitimately silent wake reply already classifies as delivered and never
retries; terminal failures and an abandoned requester stop immediately.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rukuut98qvDwzSwMp3u4kN

* fix(agents): ledger retired delete-cleanup rows for the requester settle wake [AI]

cleanup="delete" retires a child's registry row in the same funnel pass
that schedules the settle wake, so a pure delete-mode fan-out could never
rebuild its drained wave from live rows: empty batch, no wake, requester
parked — the exact incident class this wake exists to close.

Retiring cleanup paths (delete branch, reconciled-killed tombstone) now
pass settledRowRetired, and the wake ledgers the in-hand record before
its first await: concurrent last-sibling settles all see the same
ledgered rows by the time any batch computation runs, keeping batch
membership and the idempotency key stable — the guarantee keep-mode gets
from rows persisting in the registry. Ledgered rows merge into the batch
candidates (a live registry row wins by runId); entries clear on
delivered/terminal wakes and the nested/requester-gone exits, with a 24h
TTL prune as the memory backstop. In-memory only: a restart degrades a
mid-wave delete fan-out to waking with the surviving rows.

* fix(agents): snapshot delete-mode child results before cleanup clears them [AI]

The delivered-finalize path clears completion.resultText (delete mode) and
the frozen delivery payload before cleanup bookkeeping runs, so the
requester-settle wake ledgered a row whose findings had already been
emptied: a cleanup="delete" fan-out woke its requester with "(no output)"
for successfully delivered children.

Capture an immutable snapshot of the entry (completion + delivery payload)
at the top of finalizeSubagentCleanup and in the resumed-announce give-up
path — before any clearing — and pass it through completeCleanupBookkeeping
to the settle wake for the retired-row branches. Keep-mode is unchanged:
its registry rows keep their result text and win over ledgered copies.

Regression: a lifecycle-driven test drives the real delivered delete-mode
cleanup (completeSubagentRun -> announce -> finalize -> funnel) and asserts
the wake's settledEntry still carries the child's result text after the
live entry was cleared and the row retired.

* fix(agents): release drained no-wake batches from the settle ledger [AI]

The zero-required and single-delivered guard exits decline to wake a wave
that has already fully drained. Ledgered delete-mode rows in such a batch
can never join a later wake (a child spawned after the drain cannot
lifetime-overlap rows that already ended, and any still-running overlap
would have failed the drain gate before these exits), so holding their
child-result snapshots for the 24h TTL was pure retention: high-volume
delete-mode fan-outs could pin large result texts in process memory.

Release the batch at both exits. No behavior change: waves with pending
overlapping children return earlier at the drain gate, which still keeps
their rows.

* test(agents): route e2e session fixture through the sqlite accessor [AI]

Upstream flipped session reads to the sqlite-backed session accessor
(#98236), which bypasses the loadSessionStore mock this e2e used for its
in-memory session fixture — requester entry lookups came back empty and
the settle wake exited at the usable-session guard. Serve loadSessionEntry
from the same fixture; everything else in the accessor stays real.

* refactor(agents): move the requester settle wake into its own module [AI]

Two pieces of fallout from rebasing across upstream tooling changes:

- The max-lines lint budget (#107315) has no grandfathered suppression for
  subagent-announce.ts, and the settle wake + retired-row ledger pushed it
  past the cap. The wake is a coherent unit, so it moves to
  subagent-announce.requester-settle-wake.ts (matching its test file) with
  its own registry-runtime seam; the registry's lazy dep and the lifecycle
  type alias point at the new module. announce.ts drops back well under
  the budget with no suppression needed.

- The announce read-path refactor rewired the runtime barrels onto
  subagent-registry-announce-read.js, orphaning the
  hasDescendantRunAwaitingSettle re-export on subagent-registry.ts, which
  the deadcode-exports gate now flags. Removed; the retry-grace e2e reads
  the announce-read implementation directly.

* fix(agents): admit the requester settle wake as tracked gateway root work [AI]

The settle wake was launched as a detached promise from cleanup
bookkeeping, so registry cleanup or shutdown could reach quiescence
before the wake admitted its gateway turn and the last-child completion
could still be lost during restart or teardown. Route the wake through
runWithGatewayIndependentRootWorkContinuation: a live cleanup parent
reserves the root synchronously, and restart drain now waits for the
in-flight wake. Adds a deterministic quiescence-race regression.

* fix(agents): persist requester settle recovery

Store requester-settle wake obligations on subagent run rows, replay them after restart, and retire cleanup rows only after a durable outcome. Persist admitted attempts and retry deadlines, coalesce live restores, drain disconnected waves, and let the sweeper recover stranded processors.

Co-authored-by: smthfoxy <263563487+smthfoxy@users.noreply.github.com>

* test(agents): allow durable settle persistence

Keep the bulk-cancellation regression focused on recovery after the injected persistence failure instead of assuming an exact write count; requester-settle bookkeeping now adds a legitimate durable write.

Co-authored-by: smthfoxy <263563487+smthfoxy@users.noreply.github.com>

* style(agents): declare settle wake scheduler

Use a hoisted function declaration for the lifecycle scheduler so lint accepts the intentional callback cycle without a mutable binding.

Co-authored-by: smthfoxy <263563487+smthfoxy@users.noreply.github.com>

* fix(agents): harden requester settle recovery

Co-authored-by: smthfoxy <263563487+smthfoxy@users.noreply.github.com>

* fix(agents): release settle wake during retry backoff

Co-authored-by: smthfoxy <263563487+smthfoxy@users.noreply.github.com>

* test(agents): type settle wake fixtures

Co-authored-by: smthfoxy <263563487+smthfoxy@users.noreply.github.com>

* style(agents): bind settle wake transition callbacks

Co-authored-by: smthfoxy <263563487+smthfoxy@users.noreply.github.com>

* test(agents): restore past-due settle wake

Co-authored-by: smthfoxy <263563487+smthfoxy@users.noreply.github.com>

---------

Co-authored-by: smthfoxy <263563487+smthfoxy@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 17:37:18 -07:00
Leon-SK668
bdf3886024 fix(scripts): preserve emoji in GitHub API errors (#108184)
* fix(scripts): keep GitHub errors valid Unicode

* style(scripts): format GitHub error boundary test

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 17:33:35 -07:00
NianJiu
7ba436ac70 fix(cron): enforce max concurrent runs across triggers (#103323)
* fix(cron): enforce max concurrent runs across triggers

* fix(cron): cleanup failed run reservations

* fix(cron): retain queued disabled force runs

* refactor(cron): tighten shared run admission

* fix(cron): stop activation after shutdown

* fix(cron): preserve queued reservation ownership

* fix(cron): harden queued run cleanup

* fix(cron): drain admitted timer runs on failure

* fix(cron): make run reservations durable

* refactor(cron): keep admission state internal

---------

Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 17:31:57 -07:00
Lu Wang
2972db5649 fix: preserve Claude resumed synthetic turns (#90799)
Preserve Claude CLI replies that continue after a resumed-session synthetic placeholder while retaining bounded fallback for terminal no-output cases.

Fixes #99131.
Related #90789.
Prepared head SHA: 08cd27aaeb
Co-authored-by: Lu Wang <7668944+wangwllu@users.noreply.github.com>
Co-authored-by: Shakker <165377636+shakkernerd@users.noreply.github.com>
Reviewed-by: @shakkernerd
2026-07-17 01:30:59 +01:00
Peter Steinberger
d71c1fe596 feat(onboarding): prefer strongest local model in guided detection (#109250)
* feat(onboarding): rank detected local models

* docs(sdk): comment local-model rank bucket layout

* feat(sdk): rank gemma4 first for local setup-assistant models
2026-07-16 17:30:49 -07:00
Peter Steinberger
167a8ef20a fix(onboarding): harden fresh local startup and activation (#108764)
* fix(macos): preserve gateway during fresh setup

* fix(macos): validate reusable gateway service

* chore(macos): sync native i18n inventory

* fix(macos): preserve latest gateway service request

* test(macos): isolate gateway port concurrency coverage

* fix(macos): recover gateways after failed readiness

* fix(macos): repair wedged gateway listeners

* fix(macos): bound gateway startup probes

* chore(macos): sync native i18n inventory

* fix(onboarding): activate verified inference immediately

* fix(macos): isolate readiness failure generations

* chore(macos): refresh native i18n inventory

* fix(macos): serialize gateway service lifecycle

* fix(macos): sequence gateway startup persistence

* fix(macos): close gateway readiness races

* fix(macos): publish recovered gateway state

* fix(macos): make gateway readiness generation-safe

* chore(macos): refresh native i18n inventory

* fix(macos): preserve gateway endpoint identity

* fix(macos): refresh gateway ownership after attach

* fix(macos): distinguish transient gateway readiness

* refactor(macos): split gateway readiness lifecycle

* chore(macos): refresh native i18n inventory

* chore(release): keep changelog release-owned
2026-07-16 17:24:53 -07:00
sunlit-deng
a8dc0683cc fix(xai): ignore blank audio env api key (#108953)
* fix(xai): ignore blank audio env api key

* test(xai): focus blank env regression

Co-authored-by: sunlit-deng <yang.jiajun1@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 17:24:35 -07:00
Peter Steinberger
b78cf56349 improve(ci): persist warm Vitest and Node caches (#109425)
* perf(ci): harden persistent test caches

* ci: document trusted cache cleanup trigger

* ci: harden composite cache inputs

* perf(ci): isolate Node build bytecode cache
2026-07-16 17:22:28 -07:00
Peter Steinberger
85d375c1b2 chore: add live tool-surface benchmark (#109374)
* test(agents): add tool-surface live benchmark

* chore(agents): narrow live benchmark exports

* fix(agents): pin live bench models
2026-07-16 17:20:47 -07:00
Peter Steinberger
08b071ee50 test: avoid duplicate updater timeout probe (#109438) 2026-07-16 17:20:33 -07:00
ooiuuii
396194b96b fix(install): reject PATH runtimes with broken npm (#107825)
* fix(install): reject runtimes with broken npm

* test(installer): use real Node for npm selection

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 17:17:07 -07:00
iloveleon19
382d570cbf feat(channels): add unified implicit mention policy (#108829)
* feat(mattermost): add thread.requireExplicitMention to opt out of thread auto-follow

Mattermost treats any reply in a thread the bot has participated in as an
implicit mention, so requireMention only gates the first message and the bot
then answers follow-ups addressed to other people for the participation TTL.
Slack exposes channels.slack.thread.requireExplicitMention for exactly this;
Mattermost had no equivalent and its strict schema rejected the key.

Add channels.mattermost.thread.requireExplicitMention (channel + per-account),
mirroring Slack. When set, thread participation no longer counts as a mention.
Default (unset/false) keeps today's auto-follow behavior unchanged.

Related: #108269

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(channels): add implicit mention policy foundation

* feat(channels): unify implicit mention policy

Co-authored-by: leon <dodoma0919@gmail.com>

* refactor(channels): keep implicit policy inside evaluator

* fix(channels): use exported implicit mention type

* chore(channels): satisfy extension lint

* fix(config): break implicit mention type cycle

* fix(plugin-sdk): account for implicit mention config export

* refactor(config): isolate implicit mention schema

* chore(plugin-sdk): align implicit mention surface budget

* fix(config): remove unused schema re-export

---------

Co-authored-by: leon <dodoma0919@gmail.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 17:16:01 -07:00
Peter Steinberger
dbf3597f9b fix(cli): restore lint after restart health growth (#109359)
* fix(cli): split restart-health over max-lines

* fix(cli): drop dead export from restart-health test helpers
2026-07-16 17:13:58 -07:00
qingminlong
f3e8164e7c fix(ci): keep boundary output tails UTF-8 safe (#109167)
* fix(ci): keep boundary output tails UTF-8 safe

* fix(ci): preserve split UTF-8 output tails

Co-authored-by: qingminlong <qing.minlong@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 17:12:50 -07:00
pacoa
14dc557cee fix: use effective daemon port flag (#109294)
* fix: use effective daemon port flag

* fix(daemon): unify effective port parsing

Co-authored-by: pacoa <29181120+pacoa-kdbg@users.noreply.github.com>

* fix(daemon): skip consumed port values

Co-authored-by: pacoa <29181120+pacoa-kdbg@users.noreply.github.com>

* style(daemon): format effective port handling

Co-authored-by: pacoa <29181120+pacoa-kdbg@users.noreply.github.com>

---------

Co-authored-by: Paco Avelar <[email protected]>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 17:11:09 -07:00
Peter Steinberger
9cda66123b fix(ci): address reviewer findings across the perf-lever batch (#109254)
* fix(ci): address reviewer findings across the perf-lever batch

Seven follow-ups from Codex review feedback on the landed CI perf PRs:
docker packaging switches to the full build profile (the ciArtifacts
step env clobbered its canonical-dts requirement); the boundary sticky
restore gates on generative source tree OIDs in both lanes, making
restored artifacts valid by construction (kills the clock-skew mtime
false-skip and ghost declarations from deleted sources); the node-test
worker budget derives from nproc instead of the runner label (labels
over-promise under load) and keeps the 2-worker cap when plans can
overlap; the deadcode task falls back to serial Knip below 8 cores;
the lint-lane i18n verify also runs for any ui-touching diff (keys are
extracted from all ui sources, not just ui/src/i18n); the oxlint
concurrency diagnostic moves to stderr; and workspace packages join
the prompt-snapshot always-run surface.

* fix(ci): fingerprint every generative source the boundary artifacts consume

Autoreview flagged inputs outside the tree-OID gate; toolchain, config,
and script inputs were already covered by the sticky key hash, but the
old actions/cache key also fingerprinted src/plugins/types.ts and
src/video-generation sources the OID list missed. Add those plus
src/channels (the plugin-sdk declaration graph reaches its public
types) to the fingerprint in all three sites.

* fix(ci): fold runner toolchain identity into the boundary sticky fingerprint

Autoreview: the sticky key hashes config/scripts/package.json/lockfile,
but a node/pnpm toolchain bump (pinned in the workflow, not the key)
could leave the key unchanged and bless artifacts built with the prior
toolchain. Record node/pnpm versions alongside the source tree OIDs in
all three fingerprint sites so a toolchain-only change forces a cold
build.
2026-07-16 17:09:56 -07:00
xingzhou
2b4b688581 fix(github-copilot): release failed catalog responses (#109071) 2026-07-16 17:07:24 -07:00
Peter Steinberger
83d82c9302 refactor(channels): persist runtime state in plugin SQLite (#109380)
* refactor(channels): move reef, msteams, matrix, zalouser file state to SQLite with doctor imports

* fix(channels): harden SQLite state migrations

* test(reef): use SQLite flow stores in receipt suites

* fix(reef): validate restored request policy

* fix(reef): retain replay state through relay window

* docs(reef): describe durable state import

* fix(reef): honor configured legacy state path

* chore: leave changelog to release flow

* fix(reef): use managed temp root in flow tests

* fix(matrix): omit undefined device id from state
2026-07-16 17:05:28 -07:00
Peter Steinberger
333409908d docs: define SecretRef failure isolation policy (#109430) 2026-07-16 17:05:20 -07:00
Wynne668
ccb251c570 fix(process): report actual elapsed time for early lane timeouts (#109287)
* fix(process): clarify command lane timeout cause

* fix(process): complete timeout cause formatting

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 17:03:43 -07:00
Shakker
2f23642719 fix: allow local HTTP ClickClack setup codes (#109429) 2026-07-17 01:00:18 +01:00
Peter Steinberger
9899121b61 test: reduce redundant state database race stress (#109426) 2026-07-16 16:56:25 -07:00
mushuiyu886
3ba08dbf77 fix(qa): bound process snapshot probes (#109207) 2026-07-16 16:54:54 -07:00