Commit Graph
10 Commits
Author SHA1 Message Date
ClawandClaude Opus 5 cbc24a4b19 feat(gateway/v1): real SSE streaming on the openrouter lane; honest 400 elsewhere
lakehouse/auditor 13 blocking issues: cloud: claim not backed — "pretending to have streamed. Verified live: chat.completion.chunk frames from"
The gateway accepted `stream: true` and returned a single JSON body — the code
said 'Phase 39+ wires real streaming' and it never happened. A streaming client
waits for SSE frames that never arrive and reports 'no response': that is what
broke openclaw's gateway lane today and cost six orchestrator rounds before the
cause was found.

Now: openrouter/openrouter_free forward the upstream SSE byte-for-byte; every
other lane rejects stream=true with a 400 that names the lane, instead of
pretending to have streamed. Verified live: chat.completion.chunk frames from
:3100, and the non-streaming path unchanged. Streamed calls skip usage metering
and Langfuse (stated in the code and logged per call) — metering needs the final
usage chunk and belongs in its own change.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-20 07:33:47 -05:00
ClawandClaude Opus 5 dd74a1ef74 fix(gateway/v1): pass OpenAI tool calling through on the openrouter lane; reject tools loudly elsewhere
lakehouse/auditor 11 blocking issues: cloud: claim not backed — "Verified live after deploy: tool_calls returned (finish_reason tool_calls); plain request"
/v1/chat/completions deserialized into a struct without tools/tool_choice and messages without
tool_calls/tool_call_id, so serde silently DROPPED them. Tool-using agents routed through :3100
(openclaw, 2026-09-18) never saw their tools and fabricated tool output as text.

- ChatRequest: tools + tool_choice (serde default). Message: tool_calls, tool_call_id, name
  (skip_serializing_if none -> plain-text JSON is byte-identical; test pins it).
- openrouter lane forwards them and returns the model's tool_calls (content null on a
  tool-call-only turn, finish_reason passed through).
- every other provider: HTTP 400 when a request uses tools, instead of silent stripping.

Verified live after deploy: tool_calls returned (finish_reason tool_calls); plain request
unchanged; ollama + tools -> 400; multi-turn tool result round-trip answered from the tool.
cargo test -p gateway --lib: 111 passed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-19 09:08:29 -05:00
Claw 8dd0d46c3c build: pin rustc 1.94.0 — the workspace only builds in a narrow band
Established empirically in a clean Debian 13 container (2026-07-28), not inferred
from the dev host:

  1.85.0  (apt install rustc, Debian trixie)  -> FAILS, aws-sdk-* need >= 1.91.1
  1.97.1  (rustup default stable, today)      -> FAILS, ethnum E0512 transmute
  1.94.0                                      -> builds clean, workspace, 2m39s

Both obvious reviewer paths break: the distro compiler is too old and current
rustup stable is too new. Before this pin the build reproduced on our host only
because the toolchain had been restored from the previous machine — reproducible
by accident rather than by construction.

Verified the pin works: set the shell default to the BROKEN stable, and the repo
still resolved 1.94.0 and built.

Minimal native prerequisites, also tested in the clean container:
  protobuf-compiler (lance-encoding/lance-file build scripts need protoc),
  pkg-config, libssl-dev.
NOT required despite being installed on the dev host: cmake, clang, libclang-dev.
2026-07-28 12:33:53 -05:00
ClawandClaude Opus 4.8 ba3024c3af config: disable HNSW auto-tuning agent
Flips [hnsw auto-tune] enabled true->false to keep the background propose/trial/promote
loop off live search traffic on shared Ollama. Revert to re-enable.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 22:55:33 -05:00
ClawandClaude Opus 4.8 0d37a94ebf chore: drop stale scrum-WARN annotations in biometric_endpoint (comments only)
Removes dated 'Caught 2026-05-0X ... WARN' inline comments; no code change.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 22:55:33 -05:00
ClawandClaude Opus 4.8 7365a4c23e ui: staffing co-pilot UX fixes — new-tab reference nav + discoverable collapsibles
Reconciles month-old working-tree UX work (served per-request, live on the demo since
2026-05-30) into git. Implements UX_FIX_PLAN.md's 5 user complaints: reference pages
(Profiler/Architecture/Spec/Onboard/Alerts/Workspaces) open in new tabs; contract-card
collapsible shows a persistent chevron + expand/collapse label in both states; proof.html
gains a substrate-signals chapter. Not authored this session — captured as-is (working
state verified: pages serve 200).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 22:55:33 -05:00
ClawandClaude Opus 4.8 7dddb98f4b docs: STATE_OF_PLAY — record search index-alignment fix + P1-already-done
- New 2026-06-30 wave: the ethereal_workers↔workers_500k_v1 misalignment fix (8 sites,
  commits 423400e/35a80a7/1570306), verified live after mcp-server restart
- Flag that demo-plan P1 (search-box filter) is already done — the P1 section is stale
- Note the untouched 2026-05-30 uncommitted WIP + newer untracked planning docs

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 22:50:31 -05:00
ClawandClaude Opus 4.8 15703063ea fix: align 4 more intelligence routes to ethereal_workers_v1
Same index↔dataset misalignment swept across the intelligence handler — four more
/vectors/hybrid calls that paired workers_500k_v1 with filter_dataset ethereal_workers:
- similar-workers route (~2418)
- semantic role-discovery route (~2459)
- smart_search route (~2869)
- scenario worker-find (~3531)

Verified: no workers_500k_v1 index remains paired with the ethereal_workers dataset;
the 9 remaining refs are correctly aligned (workers_500k dataset) or pure RAG. Server
boots clean. Takes effect on next mcp-server restart.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 22:47:16 -05:00
ClawandClaude Opus 4.8 35a80a7306 fix: align search_workers + match_contract + /match to ethereal_workers_v1
Same index↔dataset misalignment as the /search fix (423400e), in three more paths that
pair the ethereal_workers SQL dataset with the workers_500k_v1 vector index:
- search_workers MCP tool
- match_contract MCP tool
- /match HTTP handler

All now default to ethereal_workers_v1 (same 10K id-space as the SQL table). Verified:
/match role=Forklift Operator state=IL returns only IL forklift operators (sql_matches 94).
rag_question / /ask left as-is — pure RAG, no SQL join, so no id-space to misalign.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 22:44:44 -05:00
ClawandClaude Opus 4.8 423400e843 fix: /search default index aligned to ethereal_workers_v1
The /search hybrid endpoint defaulted to index workers_500k_v1 (50K chunks, a
different worker set) while defaulting filter_dataset to ethereal_workers (10K SQL
rows). Same worker_id → different person in each, so the SQL state filter and the
vector rerank referred to different people: state='IL' surfaced a KY worker flagged
sql_verified:true. Aligned the default index to ethereal_workers_v1 (10K chunks, same
id-space as the SQL table). Verified: state='IL' now returns only IL workers.

Takes effect on next mcp-server restart. Sibling paths /match and the search_workers
tool have the same workers_500k_v1↔ethereal_workers misalignment (not touched here).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 22:42:14 -05:00