Skip to content

fix(repo): prevent daemon write replay after ack loss - #3843

Open
KooshaPari wants to merge 417 commits into
tailcallhq:mainfrom
KooshaPari:safety/daemon-ack-loss-20260813
Open

fix(repo): prevent daemon write replay after ack loss#3843
KooshaPari wants to merge 417 commits into
tailcallhq:mainfrom
KooshaPari:safety/daemon-ack-loss-20260813

Conversation

@KooshaPari

Copy link
Copy Markdown

Summary

  • distinguish daemon unavailability before a request from indeterminate post-send outcomes
  • return an explicit error instead of replaying post-send failures through the direct repository
  • cover a daemon-recorded request whose ACK is lost

Safety contract

Direct fallback remains available only after initial connect/spawn failure. DbClient::send transport failures, Response::Error, and unexpected responses are explicit indeterminate errors, preventing duplicate writes.

Verification

  • cargo test -p forge_repo
  • cargo clippy --all-targets --all-features -- -D warnings
  • cargo +1.96 fmt --check
  • git diff --check

KooshaPari and others added 30 commits July 23, 2026 01:09
Co-Authored-By: ForgeCode <noreply@forgecode.dev>
Co-Authored-By: ForgeCode <noreply@forgecode.dev>
Co-Authored-By: ForgeCode <noreply@forgecode.dev>
Co-Authored-By: ForgeCode <noreply@forgecode.dev>
Detects is_terminal at SpinnerManager construction. When stderr is not
a TTY (piped, redirected, or -p prompt mode), the spinner thread is
never started and write_ln/ewrite_ln emit plain text only.

Fixes tailcallhq#3615.
Configurable compression levels with importance-based pruning for
conversation history. AI-driven semantic analysis to identify and
compress low-value exchanges while preserving critical context.
KooshaPari and others added 15 commits August 17, 2026 01:24
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Pulled forge.exe + helioslite.exe Windows x86_64 assets directly from the
CI-built draft release v2.13.21-h.0.1.1 at KooshaPari/forgecode (sha256
matches the published checksum). Built forge_dbd locally with the same
APP_VERSION since CI doesn't ship that binary.

Installed binaries report v2.13.21-h.0.1.1 (fork scheme); forge_dbd
intentionally reports v2.13.21 (workspace version, not a release
artifact). Live verified with installed binaries: conversation list
returns real sessions, heliosdoctor reports version=v2.13.21-h.0.1.1,
FORGE_DBD_ENABLED=1 still spawns the daemon cleanly.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
The repo's .rustfmt.toml declares nightly-only options (imports_granularity,
group_imports, wrap_comments, comment_width), but CI runs stable rustfmt which
silently ignores them, so the declared style drifted across 30 files. Reformat
with cargo +nightly fmt --all.

Exception: crates/forge_main/src/info.rs line 75 (blank line inside a ```text
doc-code-fence). Modern nightly normalizes it to "/// " (trailing space), which
stable rustfmt strips back to "///" — the two cannot agree. Kept stable's form
so CI's stable fmt check stays green; nightly check flags exactly this one
line, matching the pre-existing baseline.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
…ions

forge.exe / helioslite.exe running on this machine are the user`s live
chats, not background processes. Killing them drops an in-flight
conversation. The rule documents how to handle binary upgrades when the
live process is holding a file lock (rename aside, copy new in, ask the
user to relaunch -- never Stop-Process). forge_dbd remains the only
forge-owned process for which a graceful shutdown is acceptable, with notice.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
…ard, sprint tracking, quality gates, branch cleanup
…ust deny.toml

h2 had unbounded empty DATA frames (patched in 0.4.16, low severity).
- Bump h2 0.4.13 (via aws-smithy-http-client) to 0.4.16 in Cargo.lock;
  0.3.27 via dev-only rocket->hyper 0.14 has no 0.3.x fix and is
  ignored in deny.toml (dev-only, no safe upgrade until hyper 0.14 /
  rocket moves to hyper 1).
- Fix deny.toml for cargo-deny 0.19.8: version filter not supported,
  use plain id ignore (0.4.16 is now patched so ignore only hits 0.3).

CI cargo-deny was red on this advisory; now advisories ok, licenses
and sources ok.

Co-Authored-By: ForgeCode <noreply@forgecode.dev>
…g 0.22, libsqlite3-sys 0.38) + h2 0.4.16

Merge upstream/main 6ed5d37 (34 commits: 16 Rust crate bumps
including libsqlite3-sys 0.38.0, diesel 2.3.9, two-face 0.5.2, clap
4.6.6, etc. + 17 JS/TS dep bumps). Resolve Cargo.lock conflict by
taking upstream and re-applying fork security fix h2 0.4.13->0.4.16
(RUSTSEC-2026-0258) and aligning rusqlite 0.39.0->0.40.0 in
crates/forge_dbd to use libsqlite3-sys 0.38 (was 0.37) — single
links=sqlite3 now consistent. Also posthog-rs 0.21->0.22 from
upstream Cargo.toml.

Co-Authored-By: ForgeCode <noreply@forgecode.dev>
…-reader descriptions, contrast checking, and semantic validation
… wrap)

Fixes CI test failure forge_config::schema generate_workflow_schema after upstream sync (34 commits).

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
- ConfigReader::forge_base_path() + is_helioslite_binary() gating
- ForgeAPI background task polls ~/.forge/.forge.db every 5s (FORGE_SYNC_INTERVAL_SECS, FORGE_SYNC_DISABLED kill-switch), mtime-gated idempotent import via import_forge_db (skips existing)
- Only runs as helioslite when homes distinct; forge remains write-owner, helioslite copies into its own home
- Scope h2 0.3.27 ignore to version range, bump 0.4.13→0.4.16, wrap_comments schema fix

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
@KooshaPari
KooshaPari force-pushed the safety/daemon-ack-loss-20260813 branch from dc80ed5 to 8c217b6 Compare August 19, 2026 17:43
KooshaPari and others added 2 commits August 19, 2026 10:45
Regenerate ci.yml and release-drafter.yml via forge_ci.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Remove version filter (unsupported key) — cargo-deny 0.19 expects only id+reason

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
@KooshaPari
KooshaPari force-pushed the safety/daemon-ack-loss-20260813 branch from 8c217b6 to c46c895 Compare August 19, 2026 18:30
KooshaPari and others added 3 commits August 19, 2026 12:54
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Co-authored-by: KooshaPari <koosha@example.com>
Co-authored-by: ForgeCode <noreply@forgecode.dev>
@KooshaPari
KooshaPari force-pushed the safety/daemon-ack-loss-20260813 branch from c46c895 to e55d250 Compare August 19, 2026 20:20
KooshaPari and others added 5 commits August 19, 2026 13:21
Co-Authored-By: ForgeCode <noreply@forgecode.dev>
Co-Authored-By: ForgeCode <noreply@forgecode.dev>
Fixes missing field errors after protocol added workspace_id
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
@KooshaPari
KooshaPari force-pushed the safety/daemon-ack-loss-20260813 branch from ef7ab44 to 5fb9cbc Compare August 20, 2026 00:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type: fix Iterations on existing features or infrastructure. type: provider Updates provider.json configuration.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants