Commit Graph

39 Commits

Author SHA256 Message Date
tlg
f40a5bb0f8 fix(projekt-matching): store outgoing mail copies in Sent via IMAP append 2026-07-14 09:38:12 +02:00
tlg
49aed3b243 Add user manual and design description for projekt-matching
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 20:19:56 +02:00
tlg
72a3b178cc Merge branch 'projekt-matching': automated Langflow project-skill matching with CRM entry
All 16 plan tasks complete; acceptance gates 1-3 passed live; final review fixes applied.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 18:43:04 +02:00
tlg
9ca7767208 fix(projekt-matching): final-review fixes — safe redeploy, poison-mail hardening, plan deviations note
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 17:15:39 +02:00
tlg
1863ce087c feat(projekt-matching): gate 3 passed — production recipient live
Flipped PM_NOTIFY_TO/PM_ALERT_TO Langflow variables to
Thomas.Langer@destengs.com and re-ran the example-1 e2e test. CRM
opportunity re-created (Must 86% > 85), trigger mail in Trash, no new
[Projekt-Match] mail in chancen@ INBOX, and the Langfuse trace shows
status=created/error=null proving SMTP accepted the notification for
the production recipient. Design phase complete — all 3 gates passed.
2026-07-09 16:56:54 +02:00
tlg
054005a7c2 test(projekt-matching): gate 2 and dedup e2e passed 2026-07-09 16:39:01 +02:00
tlg
9b51272413 test(projekt-matching): gate 1 e2e passed (consider path via e-mail) 2026-07-09 16:24:34 +02:00
tlg
a36ea14b84 fix(projekt-matching): nice-heading exception in extract prompt; lock enable_thinking in tests
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 16:09:58 +02:00
tlg
53b5de28bc test(projekt-matching): e2e helper scripts; component gates verified
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 15:49:08 +02:00
tlg
cef4041500 fix(projekt-matching): disable thinking for structured vLLM calls; retry non-JSON responses
With the vLLM qwen3 reasoning parser active, json_schema guided decoding
plus thinking degenerates: runs burn the whole 65k context
(finish_reason "length", ~63k completion tokens) and return empty or
truncated content. chat_template_kwargs {"enable_thinking": false} fixes
it (extract answers in ~35 s). Also: retry chat_json up to 3x on
non-JSON content, and two prompt calibrations verified against both
gate examples — Nice signal words bind only to their own line (following
unmarked lines stay Must), and compound requirements with clear evidence
for one part rate "unknown" instead of "no".

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 15:48:55 +02:00
tlg
20796b3a68 fix(projekt-matching): retry chat_json on empty/unparseable vLLM completion 2026-07-09 15:33:11 +02:00
tlg
cf088f0bd3 fix(projekt-matching): add Date and Message-ID headers to outgoing mail 2026-07-09 15:06:55 +02:00
tlg
79966e6e54 feat(projekt-matching): systemd timer, webhook trigger, inbox baseline script 2026-07-09 14:28:48 +02:00
tlg
91509e5ca6 fix(projekt-matching): setup_langfuse reads admin credentials from pod script 2026-07-09 14:16:22 +02:00
tlg
6a70332d0d feat(projekt-matching): langfuse project, keys, score configs; admin API in pod script 2026-07-09 14:11:50 +02:00
tlg
e0fb82613a fix(projekt-matching): idempotent langflow api-key creation
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 13:53:29 +02:00
tlg
e1be3ff17e fix(projekt-matching): rename component input ctx -> ctx_in (Langflow reserves Component.ctx)
Langflow 1.10's Component base class defines ctx as a @property returning
the flow-level graph.context store; a DataInput named ctx is silently
shadowed at attribute access, so the edge-delivered payload never reaches
build_out(). Renamed the field in the five downstream Flow-2 wrappers;
build_flows.py edges target ctx_in.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 13:00:06 +02:00
tlg
92b1c23c3a feat(projekt-matching): deployment scripts and programmatic flow builder
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 13:00:06 +02:00
tlg
a248dec9ea Amend plan Task 9/10: PM_LANGFLOW_API_KEY is Credential and gets upserted in build_flows 2026-07-09 11:26:38 +02:00
tlg
dc69c9a66b feat(projekt-matching): seven Langflow wrapper components 2026-07-09 11:23:08 +02:00
tlg
d500b46abe fix(projekt-matching): normalize unknown statuses, alert failure cannot block trash
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 11:20:30 +02:00
tlg
a64b0398ae feat(projekt-matching): flow-1 ingest with lock, dedup, dispatch, alert aggregation
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 11:14:59 +02:00
tlg
2f321aecc6 fix(projekt-matching): verify teamsIds/account equality in read-back; always post trace 2026-07-09 11:12:06 +02:00
tlg
1481bbc30c Update plan Task 9: PMNotify calls stage_notify directly (trace on failed runs) 2026-07-09 11:11:21 +02:00
tlg
2032305d90 feat(projekt-matching): flow-2 stages with gate, CRM verify, notification, langfuse trace 2026-07-09 11:06:11 +02:00
tlg
11b5675eab feat(projekt-matching): Cfg dataclass, IMAP mailbox with keyword/trash handling, SMTP send 2026-07-09 11:02:05 +02:00
tlg
b9133a2416 fix(projekt-matching): correct stale llm.py docstring 2026-07-09 10:59:14 +02:00
tlg
9cbdd2e28c fix(projekt-matching): use response_format json_schema (vLLM 0.22 ignores guided_json) 2026-07-09 10:55:23 +02:00
tlg
a7f94914d0 feat(projekt-matching): vLLM guided-json client with extraction and matching prompts 2026-07-09 10:44:59 +02:00
tlg
501f30edab feat(projekt-matching): EspoCRM client with dedup helpers and retries 2026-07-09 10:17:39 +02:00
tlg
2aa095b546 fix(projekt-matching): declare requests and beautifulsoup4 dependencies 2026-07-09 10:15:06 +02:00
tlg
6c4cd1a4c3 feat(projekt-matching): mail parsing, project splitting, canonical URLs 2026-07-09 10:11:25 +02:00
tlg
3bbf6631fd feat(projekt-matching): deterministic misc rules, match calc, description markdown 2026-07-09 10:07:47 +02:00
tlg
619a55f580 fix(projekt-matching): untrack egg-info build artifacts 2026-07-09 10:05:13 +02:00
tlg
963fe45a25 feat(projekt-matching): scaffold package, venv, pytest smoke 2026-07-09 10:02:38 +02:00
tlg
8a39b9aff4 Fix plan: drop dead test helper in Task 8 2026-07-09 10:00:47 +02:00
tlg
69e908a6a5 Add implementation plan: Langflow projekt-matching (16 tasks, TDD)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 09:56:04 +02:00
tlg
1981f5c90b Add design spec: automated Langflow project-skill matching with CRM entry
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 07:49:32 +02:00
tlg
da35fc0e12 Initial commit: pod setup and shell scripts
Add create_pod_langflow.sh (Langflow + Langfuse Podman pod with pinned
image versions), set-colors.sh, .gitignore, and local .claude config.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 20:27:51 +02:00