| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix(dev-harness): use repo-pinned Firebase CLI (#12393) * fix(dev-harness): use repo-pinned Firebase CLI * chore: add failure-class registry entry for dev-harness repo-pinned Firebase Adds FC-dev-harness-system-global-tool-shadows-repo-pinned to satisfy the failure-class-protocol hygiene check that was failing on PR #12393. PR #12393 declared Failure-Class: new but did not include the registry file. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P5TqoWB9unzNKthnD1pJUP --------- Co-authored-by: Tim <tim@cornwallwes.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> | 2 小时前 | |
harden: add failure-class protocol and recurrence ratchets | 1 个月前 | |
chore(scripts/migration): resumable Mixpanel raw-event export (#7197) * chore(scripts/migration): resumable Mixpanel raw-event export Streams data.mixpanel.com/api/2.0/export one UTC day at a time, pacing under the 60 queries/hour rate limit, into gzipped JSONL chunks for handoff to PostHog managed migration (or cold archive of the historical Mixpanel record before decommission). Designed for unattended overnight runs: - flock guard against concurrent invocations - atomic per-day write (.tmp -> rename only after successful gzip) - resume drives off disk state, not the manifest, so any crash mode (Ctrl+C, kill -9, OOM, VM reboot) leaves at most one in-flight day to redo - 5-attempt exponential backoff on 5xx/timeout, infinite backoff on 429 (does not consume retry budget), hard abort on 401/403 - 0-byte sentinel distinguishes legitimately empty days from unfetched ones - optional GCS mirror per chunk via gsutil Auth needs a Mixpanel service account (Org Settings -> Service Accounts) with Consumer role on the target project. README documents the full operational flow. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(scripts/migration): operational README for mixpanel_export.sh Documents env vars, output layout, resume semantics, failure-handling matrix, run command (tmux), and post-run verification queries (coverage gaps, manifest totals vs Mixpanel insights). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> | 2 个月前 | |
Add local onboarding Figma sync tooling (#6361) | 4 个月前 | |
harden(devex): converge backend Python formatting | 6 天前 | |
fix(ci): diff pull requests from synthetic merge parents | 1 个月前 | |
Add release process guardrails | 2 个月前 | |
Add release process guardrails | 2 个月前 | |
chore: remove remaining Rust desktop references | 1 个月前 | |
chore(scripts): harden ops helpers and fix stale Desktop paths Replace eval() with json.loads for Firebase service-account JSON, unify cm-builds under x-auth-token with HTTP status checks, and point onboarding sync tooling at desktop/macos/Desktop instead of the removed desktop/Desktop layout. Co-authored-by: Max Carter 祁明思 <max@tsc.hk> | 12 天前 | |
fix(desktop/macos): stop the screen-recording consent dialog from recurring (#12239) * fix(desktop/macos): stop the screen-recording consent dialog from recurring macOS repeatedly showed the "would like to record this computer's screen and audio" re-confirmation dialog even though the Screen Recording grant was intact. tccd confirms the grant was never lost: Handling access request to kTCCServiceScreenCapture, from Sub:{com.omi.computer-macos.beta} ReqResult(Auth Right: Allowed (System Set), promptType: 1, DB Action:None) promptType: 1 is macOS asking to periodically re-confirm consent for app-built content filters (SCContentFilter(desktopIndependentWindow:), i.e. capture that bypasses the system window picker). Two causes, both ours: 1. Sampling amplifier. The app never held a persistent capture stream — every frame was a fresh one-shot SCContentFilter + SCScreenshotManager.captureImage. Measured 267 kTCCServiceScreenCapture authorization requests in 180s (~1.5/s, ~5000/hour), each with a full SecStaticCodeCheckValidity(). A re-consent macOS intends to surface rarely was sampled thousands of times an hour and fired the instant it came due. 2. Retry loop re-armed the dialog. captureWindowCGImage collapsed every error into .failed, including "The user declined TCCs". The capture tick opened another session seconds later and re-armed the prompt — observed three times in ten minutes. Fix A (flagged): one long-lived SCStream scoped to the frontmost window (WindowCaptureStreamEngine). Window switches ride updateContentFilter and resizes updateConfiguration on the live stream, so authorization is paid once per stream start rather than per frame. The filter stays desktopIndependentWindow — a display-scoped stream with client-side cropping was rejected because it moves the per-window privacy boundary (Rewind exclusions, filtered browser windows) from OS-enforced to app-enforced. Fix B (unflagged, straight bug fix): "user declined TCCs" is classified and terminal. Monitoring stops, one banner per episode offers restart, and the recovery/background polls exit through the same handler instead of re-arming the dialog every 5-60s. The Exposé/Mission Control carve-out is preserved — that mode raises the same error transiently and must not stop capture. Also fixes a sibling of the same defect class found while sweeping: onboarding ran checkAccessibilityPermission (up to five cross-process AX round trips), checkAutomationPermission and checkFullDiskAccess every second for the life of the view — three authorization subsystems, thousands of denied privileged checks per onboarding session. Now every 5th tick; the instant grant-edge signals (accessibility observer, app-activation refresh) are untouched. Privacy note: the retarget protocol (beginRetarget/endRetarget) exists because a frame captured under the old filter but delivered after a retarget would otherwise be tagged with the new window's ID and handed to a caller that believes it is looking at the new window. Each stream also owns its own sink, so a departing stream cannot deliver into its replacement. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(repo): make the failure-class protocol declarable without guessing or bypassing Declaring a failure class was hard in ways that pushed authors toward the wrong action. Each of these was hit while declaring one class for the screen-recording consent fix in this PR. 1. `Failure-Class: new` was unsatisfiable. It requires an added definition, and the schema required a non-empty `evidence_prs` — but `evidence_prs` records *merged* PRs, and the PR fixing a class's first instance has no number until it is opened. The only ways through were to invent a number or push with --no-verify and backfill. `evidence_prs` may now be empty: the adding commit is the evidence and `git log -- <definition>` recovers it. Nothing enforced recurrence from this field anyway — the guard-artifact ratchet counts declarations in git history — so requiring it bought paperwork, not traceability. Scoping the allowance to "added by this change" was the obvious fix and is wrong: it passes in the authoring PR, then fails forever afterwards, because a merged definition is no longer new. There is a test for that. 2. The declaration syntax taught itself ambiguously. "Failure-Class: FC-<slug> | new | none" reads as a pipe-separated value in a repo whose other PR-body directives really are pipe-separated (Line-Count-Exception: path | a -> b | reason). Writing "FC-my-slug | new" got the same template echoed back. The three forms are now listed as alternatives everywhere they appear, and the error names the pipe mistake specifically. 3. That same mistake reported the wrong remedy. An invalid declaration fell into the instance-fix registry guard, so the error said registry edits need a separate lifecycle PR — which points at deleting the definition file, when the actual defect is the malformed line above it. The guard now runs only for a declaration that names a known class. 4. `prepare` printed all 145 definitions in full, which is unreadable, and an unreadable registry gets a new class invented instead of an existing one reused — inflating the registry the protocol wants to keep small. It now lists the classes whose advisory `scope_hints` overlap the change (145 -> 23 here, surfacing the adjacent FC-concurrent-capture-contention), with --all-candidates for the rest. This narrows what is listed, never what is chosen: it never narrows to empty, since that would read as "no class can apply" — a classification this CLI does not make. `pr_preflight`'s generated PR body labels the narrowed list accordingly. The PR template said a `new` declaration must go in a separate PR, never the instance-fix PR, which contradicted both the validator and the registry's own history (FC-workflow-script-input-contract shipped in its fix). It now separates adding one new definition alongside a fix, which is allowed, from every other registry transition, which is not. Failure-Class: none Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(ci): move the last upload-artifact@v4 pin to v7 `test_standard_actions_no_longer_use_node_20_majors` has been failing on main: desktop_publish_preview.yml was the one workflow still pinned to actions/upload-artifact@v4 (Node 20), against 19 workflows already on v7. That test only runs in the preflight lane when pr_preflight.py or its siblings change, so the failure sat latent until the failure-class commit in this branch touched that file and pulled the lane in. Bumping the outlier to match every other workflow clears it. No behavior change: the step's inputs are unchanged and v7 accepts them. Failure-Class: none Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * test(desktop/macos): make the capture-consent tests deterministic and behavioral Two desktop-test-quality ratchets caught the new tests, and both were catching something real rather than being in the way. Wall-clock waits (16 -> 17): `testWaiterFromPreviousTargetIsReleasedEmpty` slept 30 ms to let a waiter park before retargeting. On a loaded machine the retarget can land before the continuation registers, so the test would have passed for the wrong reason. `CaptureFrameSink` now exposes `hasParkedWaiter`, and the test yields until the waiter is actually parked. Production-source inspection (54 -> 55 files): two tests asserted against the *text* of ProactiveAssistantsPlugin.swift — that certain function bodies contain `captureActiveWindowCGImage()` and `case .permissionDeclined:`. That pins today's source layout rather than behavior, and breaks on any rename. Removed. The contracts they guarded are covered behaviorally by the classifier tests (`SCStreamError.userDeclined` and the message fallback both classify as `.permissionDeclined`) and by the policy tests (a decline outside the special system modes is terminal and notifies once). The residual gap is honest: nothing now pins the recovery and background polls to the classified probe, so a refactor could reintroduce the unclassified `captureActiveWindowAsync` `Data?` probe that erased the decline. Catching that behaviorally needs a seam through the plugin's async lifecycle that does not exist yet; a source-text assertion was not a real substitute for it. Also adds the two new engine files to screen-recording-permission.yaml's `covers:` list, which desktop-e2e-flow-coverage requires. Failure-Class: none Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * chore(failure-classes): record this PR as the class's evidence FC-privileged-consent-resampled-on-timer was authored with `evidence_prs: []`, which is now valid precisely because the number did not exist yet. Filling it in once the PR is open is the intended flow, not a required follow-up: an empty list stays valid forever, so nothing is broken if this step never happens. Failure-Class: none Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(desktop/macos): compile the capture engine under the pinned CI toolchain CI pins Xcode 16.4; this machine has 26.2. The two SDKs disagree about the capture engine's concurrency, so a clean local build and a green local test run proved nothing about the jobs that gate the PR. Three errors, all real under 16.4: - `static let ciContext` is global mutable state whose legality depends on whether the SDK declares `CIContext` as `Sendable`. 16.4 says no and demands `nonisolated(unsafe)`; 26.2 says yes and rejects that attribute as unnecessary. No spelling satisfies both, so the context moves to an instance property of `CaptureFrameSink` (already `@unchecked Sendable`) and the question stops being asked. Cost is one context per stream — the lifetime this engine exists to make long. - `withStreamLock<T>` returned a generic, non-Sendable value out of a closure, which 16.4 treats as sending it from a nonisolated context. It is now Void-returning, and `configureStream` — the one holder that returns a `CaptureFrameSink` — takes the lock directly with `acquireStreamLock` and releases it in a `defer`, so no value crosses a closure boundary. Behavior is unchanged: same lock, same bound, same leak-proof release. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(desktop/macos): import ScreenCaptureKit as preconcurrency The first fix cleared the interface-level errors, which let the pinned toolchain reach the function bodies for the first time and report the next layer: every `updateContentFilter` / `updateConfiguration` / `startCapture` / `stopCapture` call sends a `self`-isolated non-Sendable value to a nonisolated method. These were latent, not new — module emission had failed before any body was checked, so this file has never actually compiled under Xcode 16.4. ScreenCaptureKit carries no concurrency annotations in that SDK, so the crossings are errors there and silent on a newer one. `@preconcurrency` is the sanctioned way to mark a module as predating strict concurrency, and is already how this codebase handles AVFoundation, UserNotifications, GRDB, CoreAudio, and ApplicationServices. What actually serializes these calls is the stream lock. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: r <r@r> Co-authored-by: Claude Opus 5 <noreply@anthropic.com> | 11 天前 | |
fix(setup): resolve repo root without a work tree in linked worktrees (#10401) `git rev-parse --show-toplevel` exits 128 ("this operation must be run in a work tree") in a linked worktree whose git context resolves to a git dir rather than a work tree (e.g. a Conductor workspace). Three call sites assumed it always returns a path: - Makefile PYTHON collapsed to an empty prefix, breaking every target with `/scripts/dev-harness/_resolve_python.sh: No such file`. - install-git-hooks.sh aborted `make setup` at setup-hooks (Error 128). - The installed pre-commit/pre-push dispatcher aborted the hook, forcing `git push --no-verify` and silently bypassing the local gate. Makefile and the dispatcher fall back to `pwd` (make and git hooks both run from the top of the work tree) while keeping the root computed in-shell, so a checkout path with quote/`$` chars still cannot inject. install-git-hooks.sh resolves its root from the script's own location. Adds a regression to scripts/test-make-setup.sh that reproduces the 128 condition via a bare GIT_DIR and fails on the pre-fix Makefile. Failure-Class: FC-shell-source-path-interpolation fixes #10352 | 1 个月前 | |
fix(ci): restore Windows pre-push portability Restore manifest-owned named check selection, Windows Job Object process ownership, safe output handling, and linked-worktree root fallbacks required by the dedicated portability lane. Failure-Class: none | 1 个月前 | |
harden(devex): converge backend Python formatting | 6 天前 | |
fix: make Pusher finalization releases fail closed Failure-Class: FC-rollout-flag-absent-from-a-cohost-of-its-code-path | 6 天前 | |
fix(ci): scope pre-push checks to final PR diff | 1 个月前 | |
fix(ci): restore Windows pre-push portability Restore manifest-owned named check selection, Windows Job Object process ownership, safe output handling, and linked-worktree root fallbacks required by the dedicated portability lane. Failure-Class: none | 1 个月前 | |
fix(ci): keep desktop main health current (#12285) | 9 天前 | |
Add local onboarding Figma sync tooling (#6361) | 4 个月前 | |
Add onboarding sync export pipeline (#6346) | 4 个月前 | |
| 1 个月前 | ||
fix(ci): run the release-process guard self-suite in the check manifest (#10351) (#11253) The 94-test self-suite for `.github/scripts/check-release-process-guards.py` was registered in no lane: it is absent from `.github/checks-manifest.yaml` and from every workflow, so its failures accumulated silently (#10351 reported 9 red tests on main). The guard command itself runs, but nothing proves the guard still rejects what it exists to reject. Register `desktop-release-process-guard-tests` in the manifest (local + ci) and add `scripts/run-release-process-guard-tests.sh`, a sibling of the existing `run-release-process-guards.sh` that resolves the same canonical backend interpreter (syncing locked deps when missing) and runs the suite under its locked pytest. Verified: - `bash scripts/run-release-process-guard-tests.sh` -> 94 passed, exit 0 (cold path also exercised: it synced backend/.venv from pylock.macos.toml first, then ran green). - Fault injection: stubbed `check_codemagic_release_publishers` to return `[]` -> 67 failed, 27 passed. The registered command executes real assertions and fails on a guard regression; restored and re-ran green. - `python .github/scripts/run_checks.py --lane local --list` selects the new check for this diff and `check-manifest-contract` validates the entry. - The 9 failures named in #10351 are already fixed on main (856ad94538); this PR closes the other half of that issue by making the suite non-orphaned. Failure-Class: FC-nonexecuting-verification-command | 29 天前 | |
ci: collapse desktop beta to signed-smoke plus hourly freshness (#11588) * ci: collapse desktop beta to signed-smoke plus hourly freshness Qualification never rolled back recent signed-smoke manifests and starved the planner when a push event was missed. Remove the lane, make source-gate failures diagnosable from one command, and alarm when candidate and live beta diverge. Co-authored-by: Cursor <cursoragent@cursor.com> * docs: retarget INV-BETA-1 guards after deleting qualification tests The auto-beta-candidate script is gone with the qualification lane; keep the locked beta-identity invariant pointing at a guard that still exists. Co-authored-by: Cursor <cursoragent@cursor.com> * ci: make skipped desktop checks legible and let a green tip unblock the train Two failure modes survived the beta-train collapse and are fixed here. Skipped jobs published the wrong check name. GitHub does not evaluate a job's `name:` for a SKIPPED job, so the conditional names on `desktop-swift` and `desktop-swift-release-compile` were published verbatim as the raw expression text. On every commit that did not touch desktop paths the required check `Desktop Swift Build & Tests` was therefore ABSENT rather than skipped, and the planner reported "missing" instead of the truth. Observed on f666ddd4a3, 7a79f08329 and 7d7ed62e5, all of which read green. The conditional existed to keep a merged `pull_request.closed` bookkeeping run from publishing a skipped required check onto the merge SHA; dropping the `closed` event removes that hazard at the source and lets both names be literals. A contract test now rejects any expression in a job name. A green tip did not unblock the train. The planner selects the newest desktop-touching commit and, when its checks are red, could only fall back to an OLDER green SHA. On Aug 14 main's tip was green while the newest desktop-touching commit below it was red on a flaky Swift suite, so the train shipped stale code or wedged. A first-parent commit above the blocked SHA contains everything the blocked SHA contains, so its own exact-SHA checks tested a superset of that tree; when they are genuinely green the train may ship from that newer SHA. Tried before the backward fallback, because it ships newer code. Only a real `ready` gate qualifies, so a skipped or absent check still never counts as success. Also keep the beta rollback precondition expressible: beta manifests carry the `signed-smoke` tier, whose frozen-schema truth is `qualification_passed: False`, so the literal T2/True requirement rejected every current rollback target. Failure-Class: none Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(web): keep the release lifecycle helper compiling under the admin es5 target `newestSparkleVersion` iterated `String.matchAll()` with `for...of`. The admin package sets "target": "es5", where iterating an IterableIterator is TS2802, so `npm run typecheck` failed and took the Web Checks Build job red. Local pre-push does not typecheck the Next.js admin app, so CI was the first place this could surface. Use `exec` loops instead of widening the package's compile target, which would change output for every file to fix one. Verified with the same commands CI runs: `npm run typecheck` clean and `npm test` 88 passed across 14 files. Failure-Class: none Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com> | 22 天前 | |
fix(scripts,ci): address review feedback on pre-commit and frontend test lane - Add scripts/run-web-frontend-tests.sh to expand the frontend test glob in a shell, making the manifest command work across Node 20/22/24 instead of relying on node --test directory discovery. - Fix the pre-commit pinned-toolchain test so the hatch fixture is reset before the web/app and web/admin loop. - Validate prettier-plugin-tailwindcss in pre-commit against package-lock.json. - Update AGENTS.md formatter guidance to mention resolved plugins. Failure-Class: none | 12 天前 | |
ci: guard apt-get network bounds instead of trusting a comment (#11947) * ci: guard apt-get network bounds instead of trusting a comment apt has no built-in timeout. Against the hosted runners' default Azure Ubuntu mirror it can connect and then never complete the transfer, so the step emits no further output and the job runs to its ceiling - six hours, where no explicit timeout-minutes exists - and reports `cancelled`, which reads as an infrastructure mystery rather than a stalled mirror. #11872 fixed this by hand in two workflows. It left one line unbounded: desktop-windows-ci.yml bounds its `apt-get update` and not the `apt-get install` directly beneath it, under a comment that says "Bound apt's network calls explicitly". The comment was already true of one line and false of the next, and nothing could tell. Bound that line, and add a check that derives the requirement from the source signal - an apt-get subcommand that touches the network - so a newly added call cannot be unbounded and nobody has to remember. Each such line must carry Acquire::Retries plus http and https Acquire timeouts, and its step must declare timeout-minutes as a backstop for what the acquire options do not cover (dpkg, a debconf prompt, a wedged post-install). `clean` and `autoremove` touch no mirror and are deliberately left alone. The self-test asserts the exact regression shape - update bounded, install forgotten - rather than only asserting today's tree is clean, so the guard cannot pass by accident once the tree is fixed. Failure-Class: none Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(ci): run the apt-bounds guard on an interpreter that has PyYAML The check failed in CI with `No module named pytest`. Two mistakes, both mine: it was written against pytest when nothing in checks-manifest.yaml uses pytest, and it was verified locally with the backend venv rather than the bare `python3` the preflight runner actually invokes. Convert the self-test to stdlib unittest, matching every sibling in .github/scripts, and route it through a wrapper that resolves the canonical backend interpreter and provisions it when PyYAML is absent - the same shape as scripts/run-release-process-guards.sh, which is the existing precedent for a guard that needs the repository's locked PyYAML. The self-test carries the tree-wide case, so the wrapper is both the proof and the enforcement. Verified by reintroducing the unbounded install line: the wrapper fails, and passes again once bounded. --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com> | 16 天前 | |
Include .plist files in artifact scanner text heuristics Add .plist to HEURISTIC_SCAN_EXTENSIONS so iOS/macOS metadata plists get denied-name and private-key checks while compiled binaries and framework bundles remain excluded. Add regression tests for Info.plist leaks, public Firebase plists, and realistic bundle metadata to guard against false positives. Co-authored-by: David Zhang <Git-on-my-level@users.noreply.github.com> | 2 个月前 | |
| 1 个月前 | ||
harden(devex): converge backend Python formatting | 6 天前 | |
fix(ci): diff pull requests from synthetic merge parents | 1 个月前 | |
fix(devex): bootstrap canonical setup in linked worktrees | 1 个月前 | |
harden(devex): converge backend Python formatting | 6 天前 | |
test(scripts): keep the pre-push cap lane hermetic against hatch env A push carrying PRE_PUSH_SKIP_BACKEND_UNIT_TESTS=1 leaked into the sourced check_backend_unit_tests_if_needed, so the cap lane skipped before writing ran_count and failed. The lane now unsets the backend hatches so the cap logic always runs. Failure-Class: none | 12 天前 | |
fix(ci): isolate pre-push fixture repository | 1 个月前 | |
Merge origin/main into codex/chat-first-ui-plan Resolved Firestore index, desktop navigation, chat prompt, preflight, and ratchet-baseline conflicts while preserving both branch contracts. | 1 个月前 | |
Include .plist files in artifact scanner text heuristics Add .plist to HEURISTIC_SCAN_EXTENSIONS so iOS/macOS metadata plists get denied-name and private-key checks while compiled binaries and framework bundles remain excluded. Add regression tests for Info.plist leaks, public Firebase plists, and realistic bundle metadata to guard against false positives. Co-authored-by: David Zhang <Git-on-my-level@users.noreply.github.com> | 2 个月前 | |
Include .plist files in artifact scanner text heuristics Add .plist to HEURISTIC_SCAN_EXTENSIONS so iOS/macOS metadata plists get denied-name and private-key checks while compiled binaries and framework bundles remain excluded. Add regression tests for Info.plist leaks, public Firebase plists, and realistic bundle metadata to guard against false positives. Co-authored-by: David Zhang <Git-on-my-level@users.noreply.github.com> | 2 个月前 | |
fix(setup): fast-forward stale worktree branches during make setup New linked worktrees often start on cursor/* branches pinned to an old main. make setup already refreshed origin/main and the shared main ref, but left the checked-out branch behind. Fast-forward the current branch when it is safely behind origin/main, and extend the hermetic setup-refresh-main tests. Verification: bash scripts/test-setup-refresh-main.sh Co-authored-by: Cursor <cursoragent@cursor.com> | 1 个月前 | |
fix(chat-first): prevent poison intents from stalling proactive delivery (#12556) * fix(chat-first): isolate poison intent delivery Give each proactive intent an independent materialization fault domain, adopt stable imported identities, and bound server-side rejection and fetch retries with reconciliation, priority ordering, telemetry, and alerting. Failure-Class: new Co-authored-by: multica-agent <github@multica.ai> * fix(chat-first): harden materialization acknowledgements Co-authored-by: multica-agent <github@multica.ai> * fix(chat-first): close remaining delivery races Keep current-request deferrals out of fetch bookkeeping, restore per-intent transactional advancement, and isolate stale cold-start receipts. Failure-Class: FC-batch-fault-domain-head-of-line-poison Co-authored-by: multica-agent <github@multica.ai> * fix(chat-first): bound remaining poison paths Failure-Class: FC-batch-fault-domain-head-of-line-poison Co-authored-by: multica-agent <github@multica.ai> * fix(chat-first): close final receipt observability gaps Failure-Class: FC-batch-fault-domain-head-of-line-poison Co-authored-by: multica-agent <github@multica.ai> * fix(chat-first): enforce typed deferral release batches Co-authored-by: multica-agent <github@multica.ai> * fix(chat-first): close round 7 delivery holes Addresses H1-H6, M7, and L8-L10 with rolling-reader-safe fetch accounting, deterministic rejection budgets, bounded repair, poison-deferral terminalization, and receipt/stall observability. Failure-Class: FC-batch-fault-domain-head-of-line-poison Co-authored-by: multica-agent <github@multica.ai> * fix(chat-first): close round 8 delivery residuals Failure-Class: FC-batch-fault-domain-head-of-line-poison Co-authored-by: multica-agent <github@multica.ai> * test(desktop): expect the screen-demo "Open the doors" default action e4316bd9bf added "Open the doors" as the default action of the screen-demo step before the doors are opened; it and that step's Continue are in mutually exclusive branches, so at most one is visible. The keyboard-shortcut tripwire still expected eight default-action sites and has failed on main since, hidden behind the test-quality ratchet failure that ran first in the same job. Expect nine and assert the new title explicitly. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> (cherry picked from commit 553a4931af45e0af8da383acbf5de503aa46c3b2) * test(chat-first): cover round 9 delivery residuals Failure-Class: FC-batch-fault-domain-head-of-line-poison Co-authored-by: multica-agent <github@multica.ai> * fix(chat-first): close round 9 delivery residuals Failure-Class: FC-batch-fault-domain-head-of-line-poison Co-authored-by: multica-agent <github@multica.ai> * fix(chat-first): close round 10 delivery residuals Failure-Class: FC-batch-fault-domain-head-of-line-poison Co-authored-by: multica-agent <github@multica.ai> --------- Co-authored-by: multica-agent <github@multica.ai> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> | 4 天前 | |
fix(desktop): stop Bluetooth PTT recovery arming capture_rebuild; treat mint 429 as retryable Bluetooth silent-mic fallback was sharing recordCaptureRebuild's outcome arm with CoreAudio rebuilds, so switch_to_built_in_mic results were mislabeled. Keep arming on the dead-mic threshold path only. Map probe HTTP 429 to exit 75 to match desktop mint transient handling. Co-authored-by: Cursor <cursoragent@cursor.com> | 1 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 2 小时前 | ||
| 1 个月前 | ||
| 2 个月前 | ||
| 4 个月前 | ||
| 6 天前 | ||
| 1 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 1 个月前 | ||
| 12 天前 | ||
| 11 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 6 天前 | ||
| 6 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 9 天前 | ||
| 4 个月前 | ||
| 4 个月前 | ||
| 1 个月前 | ||
| 29 天前 | ||
| 22 天前 | ||
| 12 天前 | ||
| 16 天前 | ||
| 2 个月前 | ||
| 1 个月前 | ||
| 6 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 6 天前 | ||
| 12 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 1 个月前 | ||
| 4 天前 | ||
| 1 个月前 |