Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ hooks/ways/.obsidian/
!scripts/doc-graph.sh
!scripts/install.sh
!scripts/project-pulse
!scripts/test-locales.py

# Governance traceability (separable)
# CLI tools (root symlinks to implementation scripts)
Expand Down
38 changes: 33 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# Update: make update

.DEFAULT_GOAL := help
.PHONY: setup install uninstall update clean help ways ways-rebuild test test-sim release
.PHONY: setup install uninstall update clean help ways ways-rebuild test test-unit test-sim test-lang test-locales test-multilingual release

WAYS_BIN = bin/ways
XDG_BIN = $(or $(XDG_BIN_HOME),$(HOME)/.local/bin)
Expand All @@ -21,8 +21,12 @@ help:
@echo " make update Pull latest changes and re-run install"
@echo " make ways Get ways binary (download or build from source)"
@echo " make ways-rebuild Force rebuild ways from source"
@echo " make test Smoke test the ways binary"
@echo " make test Run all tests (smoke + unit + sim + lang)"
@echo " make test-unit Run Rust unit tests"
@echo " make test-sim Run session simulator (8 scenarios)"
@echo " make test-lang Validate active language coverage"
@echo " make test-locales Check locale files for gaps and duplicates"
@echo " make test-multilingual Verify multilingual way matching (18 languages)"
@echo " make release Build release binary for current platform"
@echo " make uninstall Remove ways from PATH"
@echo " make clean Remove build artifacts"
Expand Down Expand Up @@ -91,18 +95,42 @@ ways-rebuild:

# --- Test ---

test: ways
test: test-smoke test-unit test-sim test-lang test-locales test-multilingual
@echo "All tests passed."

test-smoke: ways
@echo "Smoke testing ways binary..."
@$(WAYS_BIN) --version
@$(WAYS_BIN) lint --check --global && echo " lint: PASS"
@$(WAYS_BIN) match "write a unit test" >/dev/null && echo " match: PASS"
@$(WAYS_BIN) graph --output /dev/null && echo " graph: PASS"
@echo "All smoke tests passed."
@echo "Smoke tests passed."

test-unit:
@echo "Running Rust unit tests..."
@cargo test --manifest-path tools/ways-cli/Cargo.toml --bin ways --quiet
@echo "Unit tests passed."

test-sim: ways
@echo "Running session simulator (8 scenarios)..."
@cargo test --manifest-path tools/ways-cli/Cargo.toml --test session_sim -- --test-threads=1
@echo "All simulation scenarios passed."
@echo "Simulation tests passed."

test-lang: ways
@echo "Validating active language coverage..."
@$(WAYS_BIN) language --json | python3 -c "\
import json,sys; d=json.load(sys.stdin); \
active=d['locales_found']; \
print(f' Active locales in corpus: {len(active)}'); \
assert len(active) > 0, 'No active locales found in corpus'" \
&& echo " Language coverage: PASS"

test-locales:
@echo "Checking locale files for gaps and duplicates..."
@python3 scripts/test-locales.py

test-multilingual: ways
@bash tests/test-multilingual.sh

# --- Release ---

Expand Down
21 changes: 17 additions & 4 deletions hooks/ways/ea/briefing/briefing.locales.jsonl
Original file line number Diff line number Diff line change
@@ -1,4 +1,17 @@
{"lang":"ar","description":"إعداد الإحاطة الصباحية وملخص الأحداث الليلية","vocabulary":"إحاطة صباحية ملخص ليلي تقرير يومي مستجدات","embed_threshold":0.56}
{"lang":"de","description":"Morgendliches Briefing, was ist über Nacht passiert, Tagesübersicht über alle Posteingänge und Kalender","vocabulary":"Morgenbriefing Tagesübersicht aufholen was habe ich verpasst Zusammenfassung Prioritäten Posteingang Kalender Überblick","embed_threshold":0.69}
{"lang":"es","description":"Resumen matutino, ponerse al día con lo que pasó durante la noche","vocabulary":"ponerse al día resumen matutino inicio del día agenda prioridades briefing","embed_threshold":0.62}
{"lang":"ja","description":"朝のブリーフィング、昨夜の出来事の要約、一日の予定確認","vocabulary":"朝礼 ブリーフィング 要約 まとめ 予定 優先事項 今日のタスク","embed_threshold":0.7}
{"lang": "ar", "description": "إعداد الإحاطة الصباحية وملخص الأحداث الليلية", "vocabulary": "إحاطة صباحية ملخص ليلي تقرير يومي مستجدات", "embed_threshold": 0.56}
{"lang": "de", "description": "Morgendliches Briefing, was ist über Nacht passiert, Tagesübersicht über alle Posteingänge und Kalender", "vocabulary": "Morgenbriefing Tagesübersicht aufholen was habe ich verpasst Zusammenfassung Prioritäten Posteingang Kalender Überblick", "embed_threshold": 0.69}
{"lang": "es", "description": "Resumen matutino, ponerse al día con lo que pasó durante la noche", "vocabulary": "ponerse al día resumen matutino inicio del día agenda prioridades briefing", "embed_threshold": 0.62}
{"lang": "ja", "description": "朝のブリーフィング、昨夜の出来事の要約、一日の予定確認", "vocabulary": "朝礼 ブリーフィング 要約 まとめ 予定 優先事項 今日のタスク", "embed_threshold": 0.7}
{"lang": "hi", "description": "सुबह की ब्रीफिंग, रात भर में क्या हुआ इसका सारांश, दिन की समीक्षा", "vocabulary": "ब्रीफिंग सुबह सारांश रात अपडेट प्राथमिकता दैनिक इनबॉक्स कैलेंडर"}
{"lang": "id", "description": "Briefing pagi, ringkasan kejadian semalam, tinjauan hari ini", "vocabulary": "briefing pagi ringkasan semalam tinjauan hari prioritas pembaruan kotak masuk kalender"}
{"lang": "it", "description": "Briefing mattutino, riepilogo notturno, panoramica della giornata", "vocabulary": "briefing mattutino riepilogo notturno panoramica giornata priorità aggiornamento posta calendario"}
{"lang": "ko", "description": "아침 브리핑, 밤사이 일어난 일 요약, 하루 일정 확인", "vocabulary": "브리핑 아침 요약 야간 일정 우선순위 업데이트 하루 받은편지함 캘린더"}
{"lang": "th", "description": "สรุปข้อมูลตอนเช้า ทบทวนเหตุการณ์ข้ามคืน ภาพรวมประจำวัน", "vocabulary": "บรีฟฟิ่ง เช้า สรุป ข้ามคืน ภาพรวม วัน ลำดับความสำคัญ กล่องจดหมาย ปฏิทิน"}
{"lang": "tr", "description": "Sabah brifing, gece boyunca neler olduğunun özeti, günlük genel bakış", "vocabulary": "brifing sabah özet gece günlük genel bakış öncelikler gelen kutusu takvim"}
{"lang": "uk", "description": "Ранковий брифінг, підсумок нічних подій, огляд дня", "vocabulary": "брифінг ранковий підсумок ніч огляд день пріоритети оновлення календар"}
{"lang": "vi", "description": "Tóm tắt buổi sáng, tổng hợp sự kiện qua đêm, tổng quan ngày", "vocabulary": "tóm tắt sáng briefing đêm tổng quan ngày ưu tiên hộp thư lịch"}
{"lang": "zh", "description": "早间简报,夜间事件摘要,全天日程概览", "vocabulary": "简报 早间 摘要 夜间 日程 优先级 收件箱 日历 概览"}
{"lang": "fr", "description": "Briefing matinal, rattraper ce qui s'est passé pendant la nuit, résumé de la journée", "vocabulary": "briefing matinal résumé nuit agenda priorités boîte de réception calendrier rattraper"}
{"lang": "pl", "description": "Poranny briefing, podsumowanie tego co wydarzyło się w nocy, przegląd dnia", "vocabulary": "briefing poranny podsumowanie przegląd dnia priorytety skrzynka kalendarz"}
{"lang": "pt-br", "description": "Resumo da manhã, o que aconteceu durante a noite, visão geral do dia", "vocabulary": "resumo manhã briefing agenda prioridades caixa de entrada calendário atualização"}
{"lang": "ru", "description": "Утренний брифинг, сводка событий за ночь, обзор дня", "vocabulary": "брифинг утренний сводка обзор дня приоритеты почта календарь"}
21 changes: 17 additions & 4 deletions hooks/ways/ea/calendar/calendar.locales.jsonl
Original file line number Diff line number Diff line change
@@ -1,4 +1,17 @@
{"lang":"ar","description":"جدولة الاجتماعات والتحقق من التوفر في التقويم","vocabulary":"تقويم اجتماع موعد جدولة توفر حجز","embed_threshold":0.69}
{"lang":"de","description":"Termine planen, Verfügbarkeit prüfen, Zeitblöcke im Kalender reservieren, Besprechungen erstellen, freie Zeitfenster finden","vocabulary":"Termin Kalender Verfügbarkeit Zeitblock Besprechung Einladung Erinnerung verschieben freier Slot buchen Zeitzone Terminplanung","embed_threshold":0.74}
{"lang":"es","description":"Agendar reuniones, consultar disponibilidad, bloquear tiempo, eventos del calendario","vocabulary":"agendar calendario disponibilidad bloquear tiempo evento reunión invitación horario","embed_threshold":0.68}
{"lang":"ja","description":"会議のスケジュール調整、空き時間の確認、カレンダー管理","vocabulary":"スケジュール カレンダー 予定 会議 空き時間 予約 招待 日程調整","embed_threshold":0.76}
{"lang": "ar", "description": "جدولة الاجتماعات والتحقق من التوفر في التقويم", "vocabulary": "تقويم اجتماع موعد جدولة توفر حجز", "embed_threshold": 0.69}
{"lang": "de", "description": "Termine planen, Verfügbarkeit prüfen, Zeitblöcke im Kalender reservieren, Besprechungen erstellen, freie Zeitfenster finden", "vocabulary": "Termin Kalender Verfügbarkeit Zeitblock Besprechung Einladung Erinnerung verschieben freier Slot buchen Zeitzone Terminplanung", "embed_threshold": 0.74}
{"lang": "es", "description": "Agendar reuniones, consultar disponibilidad, bloquear tiempo, eventos del calendario", "vocabulary": "agendar calendario disponibilidad bloquear tiempo evento reunión invitación horario", "embed_threshold": 0.68}
{"lang": "ja", "description": "会議のスケジュール調整、空き時間の確認、カレンダー管理", "vocabulary": "スケジュール カレンダー 予定 会議 空き時間 予約 招待 日程調整", "embed_threshold": 0.76}
{"lang": "hi", "description": "मीटिंग शेड्यूल करें, उपलब्धता जांचें, कैलेंडर पर समय ब्लॉक करें", "vocabulary": "कैलेंडर मीटिंग शेड्यूल उपलब्धता समय इवेंट निमंत्रण रिमाइंडर"}
{"lang": "id", "description": "Menjadwalkan rapat, memeriksa ketersediaan, memblokir waktu di kalender", "vocabulary": "kalender rapat jadwal ketersediaan waktu acara undangan pengingat"}
{"lang": "it", "description": "Pianificare riunioni, verificare disponibilità, bloccare tempo nel calendario", "vocabulary": "calendario riunione pianificare disponibilità tempo evento invito promemoria"}
{"lang": "ko", "description": "회의 일정 잡기, 가용 시간 확인, 캘린더에 시간 차단", "vocabulary": "캘린더 회의 일정 가용성 시간 이벤트 초대 알림"}
{"lang": "fr", "description": "Planifier des réunions, vérifier les disponibilités, gérer les événements du calendrier", "vocabulary": "calendrier réunion disponibilité planifier événement invitation rappel créneau réserver"}
{"lang": "pl", "description": "Planowanie spotkań, sprawdzanie dostępności, rezerwacja czasu w kalendarzu", "vocabulary": "kalendarz spotkanie termin planowanie dostępność rezerwacja zaproszenie przypomnienie"}
{"lang": "pt-br", "description": "Marcar reuniões, checar disponibilidade, bloquear horário na agenda", "vocabulary": "agenda reunião compromisso marcar disponibilidade bloquear convite lembrete horário"}
{"lang": "ru", "description": "Планирование встреч, проверка доступности, бронирование времени в календаре", "vocabulary": "календарь встреча планирование доступность бронирование приглашение напоминание слот"}
{"lang": "th", "description": "นัดหมายประชุม ตรวจสอบตารางว่าง จัดการปฏิทิน", "vocabulary": "ปฏิทิน ประชุม นัดหมาย ตารางว่าง กิจกรรม เตือน จอง เวลา"}
{"lang": "tr", "description": "Toplantı planlama, müsaitlik kontrolü, takvim etkinlikleri yönetimi", "vocabulary": "takvim toplantı planlama müsaitlik etkinlik hatırlatıcı randevu saat dilimi"}
{"lang": "uk", "description": "Планування зустрічей, перевірка доступності, керування подіями календаря", "vocabulary": "календар зустріч планування доступність подія нагадування бронювання часовий пояс"}
{"lang": "vi", "description": "Lên lịch họp, kiểm tra lịch trống, quản lý sự kiện lịch", "vocabulary": "lịch họp đặt lịch khả dụng sự kiện nhắc nhở đặt chỗ múi giờ"}
{"lang": "zh", "description": "安排会议、查看日程空闲、管理日历事件", "vocabulary": "日历 会议 安排 空闲 事件 提醒 预约 时区 日程"}
21 changes: 17 additions & 4 deletions hooks/ways/ea/comms/comms.locales.jsonl
Original file line number Diff line number Diff line change
@@ -1,4 +1,17 @@
{"lang":"ar","description":"إدارة محادثات الفريق ومنصات التراسل","vocabulary":"محادثة فريق رسائل تواصل منصة تراسل","embed_threshold":0.64}
{"lang":"de","description":"Team-Chat und Messaging-Plattformen, Nachrichten lesen und mit Freigabe senden, Kommunikationskanäle","vocabulary":"Teams Chat Nachricht Slack Kanal ungelesen Konversation Direktnachricht Gruppenchat senden antworten Benachrichtigung Erwähnung","embed_threshold":0.66}
{"lang":"es","description":"Chat de equipo y plataformas de mensajería, envío de mensajes","vocabulary":"teams chat mensaje slack canal no leído conversación respuesta notificación","embed_threshold":0.62}
{"lang":"ja","description":"チームチャットやメッセージングの管理、メッセージ送信","vocabulary":"チャット メッセージ 通知 チャンネル 返信 未読 会話 連絡","embed_threshold":0.61}
{"lang": "ar", "description": "إدارة محادثات الفريق ومنصات التراسل", "vocabulary": "محادثة فريق رسائل تواصل منصة تراسل", "embed_threshold": 0.64}
{"lang": "de", "description": "Team-Chat und Messaging-Plattformen, Nachrichten lesen und mit Freigabe senden, Kommunikationskanäle", "vocabulary": "Teams Chat Nachricht Slack Kanal ungelesen Konversation Direktnachricht Gruppenchat senden antworten Benachrichtigung Erwähnung", "embed_threshold": 0.66}
{"lang": "es", "description": "Chat de equipo y plataformas de mensajería, envío de mensajes", "vocabulary": "teams chat mensaje slack canal no leído conversación respuesta notificación", "embed_threshold": 0.62}
{"lang": "ja", "description": "チームチャットやメッセージングの管理、メッセージ送信", "vocabulary": "チャット メッセージ 通知 チャンネル 返信 未読 会話 連絡", "embed_threshold": 0.61}
{"lang": "fr", "description": "Chat d'équipe et plateformes de messagerie, lecture et envoi de messages", "vocabulary": "chat message équipe canal non lu conversation réponse notification"}
{"lang": "hi", "description": "टीम चैट और मैसेजिंग प्लेटफॉर्म, संदेश पढ़ना और भेजना", "vocabulary": "चैट संदेश टीम चैनल अपठित बातचीत जवाब सूचना"}
{"lang": "id", "description": "Chat tim dan platform pesan, membaca dan mengirim pesan", "vocabulary": "chat pesan tim kanal belum dibaca percakapan balas notifikasi"}
{"lang": "it", "description": "Chat di team e piattaforme di messaggistica, leggere e inviare messaggi", "vocabulary": "chat messaggio team canale non letto conversazione risposta notifica"}
{"lang": "ko", "description": "팀 채팅 및 메시징 플랫폼, 메시지 읽기 및 보내기", "vocabulary": "채팅 메시지 팀 채널 읽지않음 대화 답장 알림"}
{"lang": "pl", "description": "Czat zespołowy i platformy komunikacyjne, czytanie i wysyłanie wiadomości", "vocabulary": "czat wiadomości teams slack kanał nieprzeczytane rozmowa odpowiedź powiadomienie"}
{"lang": "pt-br", "description": "Chat de equipe e plataformas de mensagens, ler e enviar mensagens", "vocabulary": "chat mensagens teams slack canal não lida conversa resposta notificação"}
{"lang": "ru", "description": "Командный чат и платформы обмена сообщениями, чтение и отправка сообщений", "vocabulary": "чат сообщения teams slack канал непрочитанное переписка ответ уведомление"}
{"lang": "th", "description": "แชททีมและแพลตฟอร์มรับส่งข้อความ อ่านและส่งข้อความ", "vocabulary": "แชท ข้อความ ทีม ช่อง ยังไม่อ่าน สนทนา ตอบ แจ้งเตือน"}
{"lang": "tr", "description": "Takım sohbeti ve mesajlaşma platformları, mesaj okuma ve gönderme", "vocabulary": "sohbet mesaj takım kanal okunmamış konuşma yanıt bildirim"}
{"lang": "uk", "description": "Командний чат та платформи обміну повідомленнями", "vocabulary": "чат повідомлення команда канал непрочитане розмова відповідь сповіщення"}
{"lang": "vi", "description": "Chat nhóm và nền tảng nhắn tin, đọc và gửi tin nhắn", "vocabulary": "chat tin nhắn nhóm kênh chưa đọc hội thoại trả lời thông báo"}
{"lang": "zh", "description": "团队聊天和消息平台,阅读和发送消息", "vocabulary": "聊天 消息 团队 频道 未读 对话 回复 通知"}
Loading
Loading