Skip to content

feat(tools): harden contact and text measurement contracts - #1573

Draft
seonghobae wants to merge 21 commits into
feature/data-anonymizer-tool-5829714139815844388from
feature/add-new-tools-9416364421448327557
Draft

seonghobae wants to merge 21 commits into
feature/data-anonymizer-tool-5829714139815844388from
feature/add-new-tools-9416364421448327557

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Current authority — 2026-09-15

  • protected default: develop@042b0c70531b229af3acbd0421a2f23098d848b3
  • canonical parent: feat: 데이터 비식별화(Data Anonymizer) 도구 추가 #1482 feature/data-anonymizer-tool-5829714139815844388@b535366630ae7ccd5aeca741a83cc04fc49a4b67
  • exact head: a49cdb8ef754986e4a21a833a3e7a72bb82af323
  • lifecycle: Draft / ordinary-restacked / 7-file child delta preserved / hosted evidence and independent approval required
  • fresh effective child delta: backend/api/tools.py, backend/services/contact_information_extractor.py, backend/services/text_structure_statistics.py, backend/tests/test_text_analysis_services.py, backend/tests/test_text_analyzer_measurement_contract.py, docs/doctoring/contact-information-mailbox-identity.md, docs/doctoring/text-structure-statistics-boundary.md

a49cdb8e... is an ordinary two-parent adoption of current #1482 b5353666... and preserves the exact prior #1573 tree. Fresh compare is ahead-only with the same seven effective files. No force push, destructive rebase, source/test deletion or semantic rollback was used.

Contact-information correctness retained

The extractor remains a pure bounded service over caller-supplied text and is intentionally not exposed as a second product-visible general PII tool. It does not log, persist, index or transmit extracted PII. Purpose limitation, authorization, retention and incomplete international-format coverage remain caller/product boundaries.

  • mailbox local-part RED 1bf449a078580cc6545f862c07a8d68bf968b005 → fix fd629039b1d4a4b36d8ab5cdb1bdbc8e4e787c1b
  • IDNA U-label RED 2d6da9a86c4d4a9a231cfd96884482e5d5bd9b1d → fix f7b9974ba0e267d45dae82e3626f6a33a7e16d21
  • the IDNA rule keeps local-part identity exact, ASCII domain labels case-insensitive and non-ASCII U-labels exact; it deliberately does not invent A-label/U-label conversion, Unicode normalization, provider canonicalization or deliverability lookup.
  • prior focused isolated harness after the IDNA fix: 11 passed / 0 failed; this remains local predecessor evidence, not hosted current-head proof.

Text-structure measurement retained

The prepared service previously called punctuation runs sentence_boundary_count, an unsupported construct claim. RED fbc8dd378e50e9e16a2992d9f11ce1d7ccdaf0d1 → fix 7e8559b83c08427f76098798edd683a1dd777ad6 renamed the measure to terminal_punctuation_run_count and advanced the transparent segmentation contract. It does not claim language-independent words, readability or sentence segmentation.

For buyer-visible text_analyzer, RED 6b7396a4660e049b6ec4180167ef92b9a62c4416 → fix fc331fa0665e0c1569c2fb40d6eee57bb3ee9397 delegates to the descriptive service, exposes canonical v2 fields and retains old char_count, char_count_no_spaces and word_count only as explicit compatibility aliases. Doctoring records the UAX #29 boundary and removal condition.

Owner boundary and evidence

#1247/#1418 own the product-visible auditable contact-data redaction contract. This lane's contact extractor is a bounded internal service and must remain an ACL/consumer dependency, not a parallel public PII authority. Any later integration with #1418 must preserve the mailbox/IDNA correctness evidence above rather than silently replacing it.

All prior local/hosted evidence is predecessor evidence after the ancestry-only restack. a49cdb8e... needs fresh repository/organization required checks, zero current-head actionable findings/threads and qualifying independent post-last-push approval. Do not self-approve, weaken gates, force-push, destructively rebase or add a dummy commit merely to manufacture queue activity.

`backend/api/tools.py`에 이메일 텍스트에서 이메일과 전화번호를 추출하는 `contact_info_extractor`와 텍스트 가독성 점수를 측정하는 `readability_scorer` 도구를 추가했습니다. 이를 지원하기 위해 `backend/tests/test_tools_api.py`에 최대 글자 수 예외 케이스를 포함한 단위 테스트들을 추가하여 테스트 커버리지 100%를 달성했습니다.
CHANGELOG.md에 변경 내역을 업데이트했습니다.
@google-labs-jules

Copy link
Copy Markdown
Contributor

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@coderabbitai

coderabbitai Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@seonghobae
seonghobae marked this pull request as draft September 5, 2026 10:50
@seonghobae
seonghobae changed the base branch from develop to feature/data-anonymizer-tool-5829714139815844388 September 5, 2026 11:46
@seonghobae seonghobae changed the title feat: add contact_info_extractor and readability_scorer tools feat(tools): prepare contact extraction and descriptive text statistics Sep 5, 2026
@seonghobae seonghobae changed the title feat(tools): prepare contact extraction and descriptive text statistics feat(tools): harden contact and text measurement contracts Sep 5, 2026
@seonghobae seonghobae added enhancement New feature or request priority: medium Normal-priority or P2 work type: feature New or expanded product capability labels Sep 7, 2026 — with ChatGPT Codex Connector
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request priority: medium Normal-priority or P2 work type: feature New or expanded product capability

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant