Conversation
Second intake tool, find_relevant_faq_articles — mirrors find_similar_resolved_tickets but over the faq family: mandatory once before finish_handoff when enabled, links only (no article text), own toggle (faq_enabled) and own search settings (faq_family, faq_candidates, faq_top, faq_min_score, faq_chunk_kinds, faq_statuses) independent of similar_*. Closes TASK-078. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EKbZpE9vBUBe7PG6mC41dM
Documentation build overview
4 files changed± admin-ui/index.html± configuration/index.html± prompts/index.html± telemetry/index.html |
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
The two docstrings this PR touched named a count (four switches, two combinations) that the FAQ addition already broke once. Drop the number so adding a sixth switch or a fourth combination doesn't require finding this comment too. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EKbZpE9vBUBe7PG6mC41dM
find_similar_resolved_tickets and find_relevant_faq_articles were near-identical bodies; the budget and handoff-note validators in IntakeConfig repeated the same rule twice. Extracted _find_references, _check_budget and require_note. compose.assemble now checks both families' availability concurrently instead of one after the other. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EKbZpE9vBUBe7PG6mC41dM
faq_query passed no org_ids, so candidates came from every customer's articles. The second ADR-003 layer does not catch this: confirm_visible asks whether the run may read the article, under the service account or the engineer's token, not whom the article was written for. faq_query now takes org_ids as a required keyword — a caller that forgot it must not silently get everybody's corpus — and the tool passes the ticket's own organization. The rest is ADR-033 as it already stands: an article with an empty acl_org_ids is published to everybody and passes, one that names organizations passes only for its own. A ticket without org_id warns and searches unfiltered; "the unrestricted articles only" is not expressible through the pre-filter. Inert on stock iTop, where the FAQ class declares no acl_org_fields and every article's acl_org_ids is empty. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Second intake tool,
find_relevant_faq_articles— mirrorsfind_similar_resolved_ticketsin structure, but searches thefaqfamily instead oftickets:finish_handoffwhen enabled, same pattern as similar tickets (not model discretion)[[Class:Id]]links only, no article textfaq_enabled, dependent onhandoff_note_enabled(same coupling assimilar_enabled)similar_*:faq_family,faq_candidates,faq_top,faq_min_score,faq_chunk_kindsfaq_statuses, empty by default (iTop stock doesn't map FAQstatus)Not in scope: surfacing article text to the model, showing FAQ links to the requester, anything in
vector//content_sources/(thefaqfamily already exists).Closes TASK-078.
Test plan
uv run pytest— 1218 passeduv run pre-commit run --all-files— all hooks passed🤖 Generated with Claude Code