Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
436 commits
Select commit Hold shift + click to select a range
538aa16
fix(redis): add {seq} hash tag to seq keys and pipeline routing
ULookup May 21, 2026
cc6ec26
docs(plan): add API documentation implementation plan (8 OpenAPI file…
ULookup May 21, 2026
e8b7d5b
docs(api): add OpenAPI common types (ResponseHeader, UserInfo, PageRe…
ULookup May 21, 2026
35ade69
docs(api): improve openapi-common.yaml descriptions (UserInfo, TimeRa…
ULookup May 21, 2026
4652fa9
fix(redis): add abort guard for iterative scan misuse in cluster mode
ULookup May 21, 2026
e47b150
docs(api): add OpenAPI identity domain (9 endpoints)
ULookup May 21, 2026
29fc493
docs(api): add OpenAPI relationship domain (9 endpoints)
ULookup May 21, 2026
4a0b6fd
docs(api): add OpenAPI message domain (13 endpoints)
ULookup May 21, 2026
c249ed7
docs(api): add OpenAPI conversation domain (18 endpoints)
ULookup May 21, 2026
64de1ca
docs(api): add OpenAPI transmite domain (1 endpoint)
ULookup May 21, 2026
40ad978
docs(api): add OpenAPI media domain (5 endpoints)
ULookup May 21, 2026
32e06b8
docs(push): update SCAN comments to reflect cluster-mode for_each beh…
ULookup May 21, 2026
410e879
docs(spec): add conversation service hardening design
ULookup May 21, 2026
096d3bc
docs(plan): add conversation hardening implementation plan
ULookup May 21, 2026
406d59d
feat(proto): add failed_member_ids to AddMembersRsp
ULookup May 21, 2026
b5f9c15
fix(conversation): make TransferOwner atomic with single DB transaction
ULookup May 21, 2026
785cc15
fix(conversation): add FOR UPDATE on conversation row in transfer_owner
ULookup May 21, 2026
94d36f6
fix(conversation): validate membership on idempotent PRIVATE create
ULookup May 21, 2026
5ac8890
feat(conversation): add degraded metrics counters for fail-soft paths
ULookup May 21, 2026
5fa67ca
fix(conversation): separate message degradation counter from normal e…
ULookup May 21, 2026
1b057eb
feat(conversation): add LastMessage Redis cache for ListConversations
ULookup May 21, 2026
9a59f4e
fix(conversation): use per-user cache key and fix message_id JSON type
ULookup May 21, 2026
4c799c2
feat(conversation): add member_ids to ES index for server-side search…
ULookup May 21, 2026
dc496a4
fix(conversation): Task 6-8 hardening fixes
ULookup May 21, 2026
52d05fe
fix(conversation): clamp negative cursor in ListMembers pagination
ULookup May 21, 2026
2b693e1
fix(conversation): include after_seq in last_message cache key and us…
ULookup May 21, 2026
24d6358
docs: add typing indicator design spec
ULookup May 21, 2026
b800f65
docs: fix typing indicator spec - Push already supports transparent f…
ULookup May 21, 2026
1565958
docs: add OpenAPI doc update to typing indicator spec
ULookup May 21, 2026
28d9333
docs: add typing indicator implementation plan
ULookup May 21, 2026
469c256
feat(presence): add typing notify push to SendTyping
ULookup May 21, 2026
42830fc
feat(gateway): add SendTyping route for presence service
ULookup May 21, 2026
9df44c2
fix(presence): add caller membership guard in SendTyping parsing
ULookup May 21, 2026
a0f941d
docs(api): add SendTyping endpoint to openapi-presence
ULookup May 21, 2026
e947e02
test(presence): add SendTyping functional tests
ULookup May 21, 2026
aac3313
test(presence): rename TestSendTyping_GroupChat_NoOp to _Success
ULookup May 21, 2026
7ced5ca
fix(presence): add LOG_WARN when Push channel unavailable in SendTyping
ULookup May 21, 2026
89ff203
Merge pull request #12 from ULookup/feat/typing-indicator
ULookup May 21, 2026
882a0f2
docs: add ES-MySQL consistency design spec
ULookup May 21, 2026
a32b9ee
docs: add ES-MySQL consistency implementation plan
ULookup May 21, 2026
b79b800
feat(es): support custom Redis key in ESOutbox
ULookup May 21, 2026
8aa602c
feat(metrics): add g_es_retry_total counter
ULookup May 21, 2026
4f713e6
feat(conversation): add ES retry logic, outbox serialization, and replay
ULookup May 21, 2026
a87aeba
fix(conversation): set update_time, add null guard, logging in replay…
ULookup May 21, 2026
23bbeae
feat(conversation): add retry+outbox to all 6 ES write sites
ULookup May 21, 2026
228cada
feat(conversation): add ESOutbox reaper thread and builder integration
ULookup May 21, 2026
443f174
feat(identity): add ES retry+outbox and reaper for Register/UpdatePro…
ULookup May 21, 2026
efb37af
feat(identity): add ESOutbox reaper and builder integration
ULookup May 21, 2026
8514795
docs: add ES-MySQL consistency implementation plan
ULookup May 21, 2026
e2c52f9
docs: add ES-MySQL consistency design spec
ULookup May 21, 2026
f60357d
feat(es): support custom Redis key in ESOutbox
ULookup May 21, 2026
9173b34
feat(metrics): add g_es_retry_total counter
ULookup May 21, 2026
97f4e2d
feat(conversation): add ES retry logic, outbox serialization, and replay
ULookup May 21, 2026
0e99e45
fix(conversation): set update_time, add null guard, logging in replay…
ULookup May 21, 2026
a857f91
feat(conversation): add retry+outbox to all 6 ES write sites
ULookup May 21, 2026
b5b4da9
feat(conversation): add ESOutbox reaper thread and builder integration
ULookup May 21, 2026
854437f
feat(identity): add ES retry+outbox and reaper for Register/UpdatePro…
ULookup May 21, 2026
8ea23aa
feat(identity): add ESOutbox reaper and builder integration
ULookup May 21, 2026
7802e29
Merge pull request #14 from ULookup/feat/es-mysql-consistency
ULookup May 21, 2026
c349512
fix(infra): isolate sentinel key and atomize rate limiter INCR+EXPIRE
ULookup May 22, 2026
048355d
fix(transmite): remove hardcoded secrets, add rate limit gflags, clea…
ULookup May 22, 2026
3ec1a7b
fix(transmite): resolve 9 logic issues from code review
ULookup May 22, 2026
ab54d4c
Merge pull request #15 from ULookup/feat/transmite-review-fix
ULookup May 22, 2026
6aad841
fix(push): strict code review fixes — 35 issues resolved (5C+7H+12M+11L)
ULookup May 22, 2026
013d679
docs: add containerized local deployment design spec for 3.0-dev
ULookup May 23, 2026
71f300f
docs: add containerized local deployment implementation plan
ULookup May 23, 2026
f0a5219
refactor: split config into conf/local/ for bare-metal runs
ULookup May 23, 2026
369549c
feat: add conf/docker/ with compose service names for containerized d…
ULookup May 23, 2026
841661e
feat: add presence Dockerfile for containerized deployment
ULookup May 23, 2026
378c397
refactor: change entrypoint.sh from -h/-p to -d host:port pairs for D…
ULookup May 23, 2026
dcfbac3
feat: update docker-compose for containerized deployment with service…
ULookup May 23, 2026
c2555ee
feat: add .gitignore and .env for secrets management
ULookup May 23, 2026
9497906
fix: use ${VAR} references in docker-compose for secrets from .env
ULookup May 23, 2026
9fec587
fix: resolve container build issues — use netcat-openbsd, add missing…
ULookup May 23, 2026
7a441e8
fix: add mysql:3306 to media entrypoint, fix Dockerfile layer order
ULookup May 23, 2026
c10fd88
fix: unify JWT key source — push reads auth.json like identity/gateway
ULookup May 23, 2026
41889be
fix(presence): add access_host flag to replace hardcoded 0.0.0.0 in e…
ULookup May 23, 2026
0d4bf22
fix(transmite): increase default rpc_threads from 1 to 4 to prevent E…
ULookup May 23, 2026
3f0c38a
fix(transmite): update example config rpc_threads to 4
ULookup May 23, 2026
1c05716
test(media): fix FileTooLarge test to use whitelisted mime type image…
ULookup May 23, 2026
7db1917
fix(es): add chat_session_id should match to conversation search
ULookup May 23, 2026
2304b38
test(identity): skip email verification test when SMTP_HOST not confi…
ULookup May 23, 2026
95c0000
fix(infra): harden service discovery, leader election, and background…
ULookup May 23, 2026
dbb1101
fix(gateway): add missing routes for UpdateReadAck and SelectByClient…
ULookup May 24, 2026
cc567ba
fix(message): add defensive logging and outbox fallback when push pub…
ULookup May 24, 2026
9c453b8
fix(message): add null guard for push publisher in outbox reaper
ULookup May 24, 2026
54c1a16
fix(message): add error logging when push publisher is null in notify…
ULookup May 24, 2026
6e8a5b7
feat(push): add _write_presence_offline_ for disconnect presence state
ULookup May 24, 2026
5a54a91
feat(push): add _refresh_presence_ttl_ to refresh presence key on hea…
ULookup May 24, 2026
2c9acdf
feat(push): add _notify_presence_change_ with cross-instance PushBatc…
ULookup May 24, 2026
ace43c3
fix(push): remove dead now_ts variable in _notify_presence_change_
ULookup May 24, 2026
24e4c0d
feat(push): wire presence notifications on connect, disconnect, and h…
ULookup May 24, 2026
02ee6cc
docs: add design spec and implementation plan for infra stability fixes
ULookup May 24, 2026
4b8516d
fix(dao): replace query_one<Message> with query + manual check to pre…
ULookup May 24, 2026
c8cb636
docs(api): add UpdateReadAck and SelectByClientMsgId to openapi-messa…
ULookup May 24, 2026
a470827
docs(test): 核心功能测试架构设计(单元 + 集成 + E2E)
ULookup Jul 8, 2026
827a35d
docs(test): spec self-review 修正
ULookup Jul 8, 2026
be5197e
plan(test): Phase 0a 测试基础设施实现计划
ULookup Jul 8, 2026
3bf3fb5
docs(test): 重新设计为 Go 测试架构 + Phase 0 CI 计划
ULookup Jul 8, 2026
647cb12
docs(test): 测试用例目录补充设计(124 个补充用例)
ULookup Jul 8, 2026
cc771ab
docs(test): BVT 测试设计(18 个烟雾测试用例)
ULookup Jul 8, 2026
fb46cf9
docs(test): E2E 场景测试设计(12 个场景)
ULookup Jul 8, 2026
393d53c
docs(test): 统一测试架构主设计,归档原 4 份 spec
ULookup Jul 9, 2026
ecf6485
docs(test): 新增 Phase 1/2/3 实现计划
ULookup Jul 9, 2026
3b816c4
feat(test): cleanup 包 + config database 段 + func setup 调用 CleanupAll …
ULookup Jul 9, 2026
a2f5e0a
fix(message): harden push delivery reliability
ULookup Jul 9, 2026
573275f
fix(message): mark persisted idempotent sends
ULookup Jul 9, 2026
fdf8225
fix(common): replace fixed window rate limiter
ULookup Jul 9, 2026
aa5661f
fix(message): require message id for read ack
ULookup Jul 9, 2026
30f384e
feat(test): WebSocket 客户端 + push proto 生成 (code-only, tests pending s…
ULookup Jul 9, 2026
0ad250d
fix(push): reject ack without message id
ULookup Jul 9, 2026
0b20edd
fix(common): strictly parse idempotency state
ULookup Jul 9, 2026
3f2220a
Merge pull request #50 from ULookup/codex/message-push-reliability
ULookup Jul 9, 2026
28a9a88
harden cache infrastructure
ULookup Jul 9, 2026
0848600
Merge pull request #51 from ULookup/codex/cache-system-hardening
ULookup Jul 9, 2026
2977043
feat(test): verify 包 - DB + ES 直查验证 (code-only, tests pending stack)
ULookup Jul 9, 2026
befb3b0
feat(test): fixture 扩展 - group/message/ws
ULookup Jul 10, 2026
15ecdcd
feat(bvt): setup_test.go - TestMain 加载 config + WaitForStackReady + C…
ULookup Jul 10, 2026
0819cf0
test(bvt): BVT-001~003 基础设施健康检查
ULookup Jul 10, 2026
5ca5674
test(bvt): BVT-004~006 认证链路冒烟
ULookup Jul 10, 2026
d30efa5
test(bvt): BVT-007~008 社交链路冒烟
ULookup Jul 10, 2026
1c3f4be
test(bvt): BVT-009~011 消息链路冒烟
ULookup Jul 10, 2026
84b3919
test(bvt): BVT-012~014 会话链路冒烟
ULookup Jul 10, 2026
00ae47a
fix: harden Redis cache failure handling
ULookup Jul 10, 2026
1cad99a
Merge pull request #52 from ULookup/codex/cache-redis-resilience
ULookup Jul 10, 2026
96882b1
test(bvt): BVT-015~017 媒体链路冒烟
ULookup Jul 10, 2026
6e4ea01
test(bvt): BVT-018 presence 链路冒烟
ULookup Jul 10, 2026
04b3e60
test(func): FN-TM-01/03/04 transmite 错误路径 + 读扩散
ULookup Jul 10, 2026
dc203e6
test(func): FN-MS-01/06/10 + SelectByClientMsgId + UpdateReadAck
ULookup Jul 10, 2026
953fae8
test(func): GetMemberIds 成功 + 非成员拒绝
ULookup Jul 10, 2026
332ab07
test(func): FN-WS-01/02 WebSocket 推送验证
ULookup Jul 10, 2026
ccca47f
test(func): FN-DC-01/02/03 数据一致性验证
ULookup Jul 10, 2026
4cb1643
test(func): FN-CC-01 并发相同 client_msg_id 幂等
ULookup Jul 10, 2026
5eb0015
test(func): FN-SEC-01/02/06 安全测试
ULookup Jul 10, 2026
f93d17f
test(func): SC-04 离线消息同步
ULookup Jul 13, 2026
8e09fee
test(func): SC-06 消息可靠性(MQ 可用版本)
ULookup Jul 13, 2026
6275421
ci: BVT job 门禁 + test-bvt Makefile target
ULookup Jul 13, 2026
59e6690
fix(test): final review fixes - endpoint path, push health check, git…
ULookup Jul 13, 2026
8f1ac88
feat(test): add MinIO direct-query verifier for media consistency checks
ULookup Jul 13, 2026
a59a76d
feat(test): add UploadFile and UploadLargeFile media fixtures
ULookup Jul 13, 2026
cc07953
test(media): add FN-MD-01~03 CompleteUpload success/not-uploaded/idem…
ULookup Jul 13, 2026
154acf2
test(media): add FN-MD-04~10 multipart upload init/apply/complete/abort
ULookup Jul 13, 2026
24b9935
test(media): add FN-MD-11~13 dedup/quota-exceeded/quota-remaining
ULookup Jul 13, 2026
7e1800a
test(media): add FN-MD-14~16 download/other-user/fileinfo
ULookup Jul 13, 2026
b95ff6c
test(media): add FN-MD-17~18 speech recognition invalid/empty audio
ULookup Jul 13, 2026
b2fc362
test(presence): add FN-PR-01~03 multi-device/heartbeat/offline-on-dis…
ULookup Jul 13, 2026
f3c6c52
test(presence): add FN-PR-04/07/08 subscribe-notify/batch-mixed/unsub…
ULookup Jul 13, 2026
42b0694
test(security): add FN-SEC-03~05 SQL injection/XSS/path traversal
ULookup Jul 13, 2026
8d9ba78
test(consistency): add FN-DC-04~07 recall/delete-timeline/friend-rela…
ULookup Jul 13, 2026
f3fbbad
test(ws): add FN-WS-03~07 friend-accept/conv-create/presence/reconnec…
ULookup Jul 13, 2026
8ab9f15
test(concurrency): add FN-CC-02~05 different-msgid/friend-race/media-…
ULookup Jul 13, 2026
d70313b
test(scenario): add SC-05 media upload full flow with dedup and multi…
ULookup Jul 13, 2026
771f2fe
test(scenario): add SC-07 multi-device login kick
ULookup Jul 15, 2026
80e5ab9
test(scenario): add SC-08 large group fan-out read diffusion (200 mem…
ULookup Jul 15, 2026
fa42bac
test(scenario): add SC-09 unread count consistency cross-service
ULookup Jul 15, 2026
4740b7d
test(scenario): add SC-10 message recall visibility cross-device
ULookup Jul 15, 2026
9071ca5
test(scenario): add SC-11 token refresh flow after tampering
ULookup Jul 15, 2026
14b5d8e
test(scenario): add SC-12 message search ES consistency
ULookup Jul 15, 2026
571ba06
test(scenario): poll SC-12 message search
ULookup Jul 15, 2026
5108332
refactor(test): remove all C++ gtest directories (common/test, media/…
ULookup Jul 15, 2026
d2d2018
docs(test): design Go coverage for removed C++ tests
ULookup Jul 15, 2026
65e388c
docs(test): plan framework-integrated C++ coverage replacement
ULookup Jul 15, 2026
ded4861
test(trace): add Gateway and MQ trace black-box coverage
ULookup Jul 15, 2026
9e958b9
test(media): add avatar and object-key black-box coverage
ULookup Jul 15, 2026
a8d1b7a
test(media): cover asynchronous magic-sniff quarantine
ULookup Jul 15, 2026
a25d4a5
test: address final review findings
ULookup Jul 15, 2026
3253fef
docs(test): Go 测试架构主设计 + 三阶段计划 + Phase 1 完整实现 (22/22 tasks)
ULookup Jul 16, 2026
2d63e3a
Merge pull request #54 from ULookup/docs/test-architecture-phase2
ULookup Jul 16, 2026
b39e502
merge 3.0-dev and preserve cache regression tests
ULookup Jul 16, 2026
27b66b2
Merge pull request #56 from ULookup/docs/test-architecture-design
ULookup Jul 16, 2026
738e775
docs: design cache resilience completion
ULookup Jul 15, 2026
e3a90ee
docs: clarify clustered user cache batching
ULookup Jul 15, 2026
80b52f5
docs: plan cache resilience completion
ULookup Jul 15, 2026
795dfee
test: add Redis chaos verification helpers
ULookup Jul 15, 2026
5c22e93
feat: add fast Redis circuit breaking
ULookup Jul 15, 2026
69e6e6b
fix: harden Redis circuit transitions
ULookup Jul 15, 2026
1500ab7
feat: retain rate limiting during Redis outages
ULookup Jul 15, 2026
69d41c9
fix: reclaim idle rate-limit buckets at capacity
ULookup Jul 15, 2026
88ed8d8
feat: add UserInfo multilevel caching
ULookup Jul 15, 2026
30d00b3
fix: harden UserInfo cache tests and responses
ULookup Jul 15, 2026
e131d3a
perf: jitter cache TTLs and lock retries
ULookup Jul 15, 2026
c5cce1c
fix: make cache TTL updates atomic
ULookup Jul 16, 2026
86514c0
test: harden cache TTL verification
ULookup Jul 16, 2026
79276f8
test: add cache resilience performance baseline
ULookup Jul 16, 2026
a809439
test: make PF-09 phase gates deterministic
ULookup Jul 16, 2026
f7fe97a
fix: close cache resilience review gaps
ULookup Jul 16, 2026
4a2244a
fix: preserve cache availability under races
ULookup Jul 16, 2026
4abc836
fix: fence cache fills and observe push retries
ULookup Jul 16, 2026
0bb9585
fix: make cache failover tests deterministic
ULookup Jul 16, 2026
71765c7
fix(test): align read ack requests with message ids
ULookup Jul 16, 2026
147abaa
fix(test): generate protobufs before Go validation
ULookup Jul 16, 2026
9232a5c
docs: plan PR review fixes
ULookup Jul 16, 2026
794facf
fix(cache): fence UserInfo L1 publication
ULookup Jul 16, 2026
6e1e15b
fix(cache): exercise UserInfo fence execution seams
ULookup Jul 16, 2026
1e0657c
fix(push): make unacked retries identity-idempotent
ULookup Jul 16, 2026
04305d1
fix(push): harden unacked ledger repair
ULookup Jul 16, 2026
d335bdc
fix(push): preserve unacked repair progress
ULookup Jul 16, 2026
cc29e62
ci: enforce cache reliability and performance gates
ULookup Jul 16, 2026
9f107ff
ci: enforce cache gate contract checks
ULookup Jul 16, 2026
2b1c983
test(ci): require exact ordered gate steps
ULookup Jul 16, 2026
6c2b8f2
test(ci): reject bypassable cache gates
ULookup Jul 16, 2026
855508e
docs: design ChatNow agent engineering skills
ULookup Jul 16, 2026
8e2c9a6
docs: plan ChatNow agent engineering skills
ULookup Jul 16, 2026
9b311b6
docs(agent): add ChatNow architecture orientation skill
ULookup Jul 16, 2026
c9becbc
docs(agent): clarify Media Compose topology
ULookup Jul 16, 2026
42e55f1
docs(agent): add ChatNow issue creation skill
ULookup Jul 16, 2026
2018964
docs(agent): add ChatNow Git workflow skill
ULookup Jul 16, 2026
afeda9f
docs(agent): add ChatNow test-first engineering skill
ULookup Jul 16, 2026
a7aeb6a
docs(agent): tighten ChatNow testing evidence
ULookup Jul 16, 2026
d8637e5
docs(agent): add ChatNow development skill
ULookup Jul 16, 2026
cd051f2
docs(agent): add ChatNow security skill
ULookup Jul 16, 2026
fea9139
docs(agent): tighten credential fingerprint guidance
ULookup Jul 16, 2026
4a1c662
docs(agent): add ChatNow verification skill
ULookup Jul 16, 2026
f633006
test(ci): enforce required step failures
ULookup Jul 16, 2026
0f32092
revert(agent): remove verification skill for audit
ULookup Jul 16, 2026
62a469b
revert(agent): restore verification skill after audit
ULookup Jul 16, 2026
31c849e
docs(agent): add ChatNow pull request skill
ULookup Jul 16, 2026
09ed077
docs(agent): clarify Draft PR stop conditions
ULookup Jul 16, 2026
1ddf07f
docs(agent): add ChatNow documentation maintenance skill
ULookup Jul 16, 2026
fae1948
revert(agent): remove documentation skill for audit
ULookup Jul 16, 2026
a539ca1
revert(agent): restore documentation skill after audit
ULookup Jul 16, 2026
b19ae28
feat(agent-policy): validate ChatNow Issue contracts
ULookup Jul 16, 2026
671321d
fix(agent-policy): reject Markdown validation bypasses
ULookup Jul 16, 2026
accd9f3
feat(agent-policy): validate branches and commits
ULookup Jul 16, 2026
873d022
feat(agent-policy): validate pull requests and skill sync
ULookup Jul 16, 2026
81a3287
feat(agent-policy): validate repository skill packages
ULookup Jul 16, 2026
d31f1e7
feat(agent-policy): add policy command interface
ULookup Jul 16, 2026
de2c506
docs(github): add ChatNow agent Issue forms
ULookup Jul 16, 2026
cad99cf
docs(github): add ChatNow agent pull request template
ULookup Jul 16, 2026
0a3b6f0
ci: enforce ChatNow agent engineering policy
ULookup Jul 16, 2026
611fca2
docs(agent): add ChatNow agent bootstrap instructions
ULookup Jul 16, 2026
e4303c3
fix(agent-policy): require full diff self review
ULookup Jul 16, 2026
15f6eae
Merge pull request #59 from ULookup/feat/55-agent-engineering-skills
ULookup Jul 16, 2026
b406401
docs: design executable cache gate artifacts
ULookup Jul 16, 2026
b849683
build(ci): package reproducible service artifacts
ULookup Jul 16, 2026
9bcc52f
fix(ci): harden compose artifact validation
ULookup Jul 16, 2026
45d9042
fix(ci): canonicalize artifact validation root
ULookup Jul 16, 2026
262080c
docs(test): keep cache regressions in Go framework
ULookup Jul 16, 2026
e326572
test(cache): move regressions into Go framework
ULookup Jul 16, 2026
a840f7e
ci: distribute service artifacts to cache gates
ULookup Jul 16, 2026
b4b6e94
fix(ci): validate artifacts in pinned runtime
ULookup Jul 17, 2026
4dfa993
fix(ci): restore executable artifact modes
ULookup Jul 17, 2026
b3ceb33
fix(message): restore sequence read watermarks
ULookup Jul 17, 2026
96aefa5
fix(ci): keep system ABI out of service artifacts
ULookup Jul 17, 2026
ffffba7
fix(ci): package complete non-core library closure
ULookup Jul 17, 2026
ab77f19
fix(push): report conversation sequence watermarks
ULookup Jul 17, 2026
fe2e98f
fix(ci): reject artifact library basename collisions
ULookup Jul 17, 2026
f147533
docs(test): distinguish delivery and read watermarks
ULookup Jul 17, 2026
2bdfb6a
chore: sync 3.0-dev into cache resilience
ULookup Jul 17, 2026
a75fc87
Merge pull request #57 from ULookup/codex/cache-resilience-completion
ULookup Jul 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
96 changes: 96 additions & 0 deletions .agents/skills/chatnow-creating-issues/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
---
name: chatnow-creating-issues
description: Use when any ChatNow repository change is requested, when no valid primary Issue exists, or when implementation uncovers an out-of-scope problem
---

# Creating ChatNow Issues

## Core principle

```
NO IMPLEMENTATION BRANCH OR REPOSITORY CHANGE WITHOUT A VALID PRIMARY ISSUE.
```

Urgency, a one-line change, or permission to document later does not weaken this rule. Continue only read-only investigation until the Issue exists and has a number or URL.

## Create the Issue first

1. Verify the request against source, logs, tests, or observed behavior. Do not turn an unverified suspected fix into the requirement.
2. Select the target version line. Stop if multiple targets remain valid after checking available Issue, milestone, and repository evidence.
3. Define exactly one primary problem or deliverable. Split independent work into separate Issues.
4. Write an English title and a body whose prose is Chinese. Use every heading below exactly once and in this order.
5. Validate the Issue contract, create the Issue, and record its number or URL before creating a task branch or changing the repository.

## Required body contract

```markdown
## Target Version

## Evidence

## Problem or Goal

## Scope

## Non-goals

## Acceptance Criteria

## Test-first Plan

## Risk and Security

## Architecture Impact

## Core-flow Impact

## Required Skill Updates
```

Fill the sections as follows:

| Section | Required content |
|---|---|
| `Target Version` | One existing development version line and the evidence for selecting it. |
| `Evidence` | Specific source paths, logs, failing tests, or reproducible behavior. Mark unknown facts as unknown; never invent evidence. |
| `Problem or Goal` | Current behavior or need, affected users or systems, and the observable desired outcome without assuming an implementation. |
| `Scope` | Files, services, behavior, and deliverables included in this Issue. |
| `Non-goals` | Closely related work explicitly excluded. |
| `Acceptance Criteria` | Observable, measurable checkboxes, including relevant boundaries and failure behavior. Do not encode an unverified implementation as acceptance. |
| `Test-first Plan` | The smallest RED case, its command and expected failure reason, the minimum GREEN behavior, and relevant regression coverage. |
| `Risk and Security` | Security, privacy, data, compatibility, migration, operational, and rollback risks, or an evidence-based `None`. |
| `Architecture Impact` | `Yes` or `No` plus reasoning about service boundaries and infrastructure topology. |
| `Core-flow Impact` | `Yes` or `No` plus reasoning about communication, auth, persistence, indexing, caching, sequencing, idempotency, retry, Outbox, Push, or ACK behavior. |
| `Required Skill Updates` | Exact affected ChatNow Skill/reference paths, or `None` with reasoning. Any architecture, core-flow, or test-architecture change requires relevant Skill updates in the same PR; a follow-up Issue is not a substitute. |

## Preserve the contract

Update evidence as investigation improves it. Never rewrite acceptance criteria after implementation merely to fit the produced code. If a genuine requirement change is approved, record the reason and changed requirement in the Issue before continuing, then restart planning and RED against the revised contract.

An unrelated defect, typo, cleanup, or cross-version port is not current scope. Create a follow-up Issue and keep it out of the current branch and PR. One PR resolves one primary Issue.

## Security containment exception

Immediate containment may precede the normal Issue-first order only when delaying action materially increases security harm. Create the Issue immediately, and record the exception, the harm caused by delay, containment actions, timestamps, evidence, and remaining follow-up. This exception permits only the minimum containment; it does not permit a post-hoc ordinary Issue or hidden scope.

## Stop conditions

Stop implementation and continue only read-only research when:

- GitHub is unavailable and no valid Issue exists;
- the target version remains ambiguous;
- the Issue combines multiple primary problems;
- evidence is missing or contradicts the proposed goal;
- acceptance or the RED plan is not measurable;
- security or data risk cannot be bounded safely.

## Common rationalizations

| Rationalization | Required response |
|---|---|
| "It is only one line." | Create and validate the Issue first. Size does not remove risk or traceability. |
| "Open the Issue after the fix." | Stop. Post-hoc documentation cannot authorize implementation. |
| "The deadline is too close for RED." | Define measurable acceptance and an observed RED plan before implementation. |
| "We already know the operator change." | Record verified behavior and outcome; do not make an assumed patch the contract. |
| "Fix this unrelated typo while here." | Create a follow-up Issue and exclude it from the current branch and PR. |
| "Update the architecture Skill later." | Update every relevant Skill/reference in the same architecture or core-flow PR. |
4 changes: 4 additions & 0 deletions .agents/skills/chatnow-creating-issues/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "Create ChatNow Issues"
short_description: "Create scoped, testable ChatNow engineering Issues"
default_prompt: "Use $chatnow-creating-issues to create a valid Issue before changing ChatNow."
87 changes: 87 additions & 0 deletions .agents/skills/chatnow-developing/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
---
name: chatnow-developing
description: Use when changing ChatNow production C++, Protobuf contracts, configuration, databases, caches, message queues, service discovery, or runtime infrastructure
---

# Develop ChatNow Services

## Core principle

Preserve ownership, trust, failure, and repeated-execution invariants with the smallest Issue-scoped change. A successful response is valid only when every required dependency and asynchronous handoff has defined bounded behavior.

## Entry gates

1. Confirm a valid primary Issue defines the target version, scope, acceptance criteria, risks, architecture/core-flow impact, and required Skill updates. Stop before implementation if it does not.
2. Use `chatnow-orienting` to verify affected owners, trust boundaries, durable sources of truth, caches, calls, queues, stores, and current invariants from executable evidence.
3. Use `chatnow-testing` before production code. Record a pure-Go behavioral test that failed for the expected missing behavior. If production code predates the observed RED, delete it and restart test-first.
4. Find the nearest repository pattern in the same subsystem and version line. Cite the files and preserve their contracts unless the Issue explicitly changes them.

## Implementation workflow

1. State the invariant being changed and the invariants that must remain true.
2. Assign ownership for identity, durable state, cached or coordination state, transactions, asynchronous work, and cleanup. Derive authority from authenticated server context, never an untrusted client field.
3. Specify success, synchronous failure, asynchronous failure, timeout, cancellation, retry, duplicate execution, partial completion, and recovery before editing code.
4. Make the minimum diff required by the observed RED. Do not mix unrelated refactors, formatting, generated output, or speculative abstractions.
5. Apply every relevant boundary rule below.
6. Reach GREEN with the target Go test, run relevant same-layer regressions, then refactor only while green. Report actual commands and results; do not invent unavailable commands or runtime evidence.
7. Recheck compatibility, observability, deployment/configuration, cleanup, and same-PR Skill synchronization.

## Boundary rules

### RPC and asynchronous callbacks

- Preserve server-derived authentication and authorization context across the brpc attachment; validate required metadata at the receiver.
- Map transport, timeout, authentication, validation, dependency, and application failures deliberately. Do not turn every exception into success.
- Set a bounded timeout and define whether a timed-out operation is safe to retry. Make retry limits and backoff explicit.
- Guarantee the brpc closure runs exactly once on every path. Keep response, controller, callback captures, channels, and dependent objects alive until the final callback; prevent double completion and use-after-free.

### RabbitMQ

- Identify the exchange type/name, routing key, queue owner, binding, durability, publisher-only or consumer role, and deployment configuration. Do not declare an orphan or conflicting topology.
- Define publisher-confirm handling for acknowledged, rejected, lost/unknown, synchronous-error, and timeout outcomes. Return success only after the contract's success boundary.
- Treat delivery as at-least-once. Define retry ownership, bounded retry/backoff, redelivery behavior, idempotency key/effect, duplicate result, and any Outbox or reaper recovery path.
- Preserve trace headers and ensure consumers acknowledge only after the owned durable effect reaches its declared boundary.

### Redis

- Classify each key as cache, coordination/lease, idempotency state, sequence state, routing/presence state, or authoritative security state. Name the durable source of truth when Redis is not authoritative.
- Choose fail-open, fail-closed, or explicit degraded behavior from that classification. Authorization, revocation, uniqueness, sequencing, and destructive decisions must not silently use cache-miss or exception as success.
- Bound each lookup or lock acquisition by timeout and cancellation behavior. Define retry limits, fallback, stale-data policy, TTL, key ownership, and cleanup.
- Distinguish miss, confirmed absence, timeout, connection failure, parse failure, and partial write in code, logs, responses, and tests.

### State, concurrency, and resources

- Define the database transaction boundary, commit point, rollback behavior, and relationship between database writes and external side effects. Never imply atomicity across MySQL, Redis, Elasticsearch, RabbitMQ, or RPC without an implemented protocol.
- For repeated execution, state the idempotency key, uniqueness or monotonic guard, result after prior success, behavior after partial failure, and retry owner.
- Protect shared state with the nearest established synchronization pattern. State lock scope/order, contention and timeout behavior, and object lifetime across threads, event loops, goroutines in tests, callbacks, shutdown, and cancellation.
- Assign one owner to close or release every lock, socket, channel, Redis lease/key, database handle, callback, thread, and temporary test resource on all paths.

## Compatibility and observability

- Preserve Protobuf field numbers, wire meanings, response envelopes, public error text, configuration defaults, exchange/queue contracts, database compatibility, and rolling mixed-version behavior unless the Issue explicitly authorizes a compatibility change.
- Treat intentional public compatibility or settled-semantic changes as requiring human approval.
- Use English for new identifiers, comments, and structured log messages. Include safe request/trace and outcome context; never log credentials, tokens, full message content, or unnecessary personal data.
- Update affected ChatNow Skills and references in the same PR when architecture, service boundaries, infrastructure topology, core flows, or test architecture change. A follow-up Issue is not a substitute.

## Required output

Return these fields in order:

1. **Changed invariants** — the Issue-scoped behavior change and preserved ownership, trust, ordering, and source-of-truth rules.
2. **Files/ownership** — minimal changed files, nearest patterns used, and owners of state, side effects, callbacks, and cleanup.
3. **Failure behavior** — bounded synchronous, asynchronous, timeout, cancellation, partial-failure, and recovery semantics.
4. **Retry/idempotency** — retry owner, limits/backoff, idempotency key or guard, duplicate result, and repeated-execution behavior.
5. **Compatibility** — wire, error, configuration, topology, data, rollout, and public-behavior impact.
6. **Tests** — selected Go layer/case ID, exact observed RED, GREEN and regression commands/results, cleanup ownership, and checks not run.
7. **Skill updates** — exact Skill/reference files changed in the same PR, or `None` with evidence that no governed architecture, core-flow, infrastructure, or test rule changed.

## Common mistakes

| Mistake | Required correction |
|---|---|
| Returning success for every Redis exception | Classify the key and failure, select an explicit safe mode, bound the call, and test each outcome. |
| Retrying an unknown MQ publish as a new effect | Use publisher confirms and an idempotency guard; define the duplicate result and retry owner. |
| Completing an RPC before its callback or capture lifetime ends | Keep dependencies alive and use an exactly-once completion guard. |
| Updating a database and broker as if one transaction | Define the commit boundary and use the established Outbox/recovery pattern where required. |
| Copying a nearby pattern without checking trust or ownership | Cite the pattern, then verify its boundary matches this operation. |
| Calling a compile or static check a behavior test | Report only an observed Go behavioral RED/GREEN as runtime evidence. |
4 changes: 4 additions & 0 deletions .agents/skills/chatnow-developing/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "Develop ChatNow Services"
short_description: "Implement safe changes in ChatNow services"
default_prompt: "Use $chatnow-developing to implement this ChatNow production change safely."
79 changes: 79 additions & 0 deletions .agents/skills/chatnow-maintaining-documentation/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
---
name: chatnow-maintaining-documentation
description: Use when creating or changing ChatNow Skills, architecture references, API or operations documentation, engineering instructions, Issue text, or pull request text
---

# Maintain ChatNow Documentation

## Core principle

Keep one verified account of each engineering fact. Derive current-state claims from executable evidence, label proposals as proposals, and synchronize every affected Skill and reference in the same PR.

## Evidence and labeling

Use evidence in this order:

1. Production source and Protobuf contracts.
2. Executable configuration, CMake, Docker Compose, tests, and CI workflows.
3. Git history for version-specific intent.
4. README files, plans, specifications, roadmaps, changelogs, and other prose as secondary context only.

Verify secondary claims against higher-precedence evidence. Cite repository paths and symbols or lines for material facts. Do not state an unverified, planned, partially implemented, unavailable, or historical capability as current.

For an engineering reference or proposal, record the applicable version line, verification or proposal date, and one explicit status: `Current`, `Proposed`, `Historical`, `Deprecated`, or `Unverified`. Keep current and proposed behavior in separate sections. A date or confident tone does not turn a proposal into current behavior.

## Mandatory workflow

1. Resolve the primary Issue, target version line, current commit, audience, and canonical document for the subject.
2. Inspect the executable evidence that owns every changed claim. Record contradictions and unknowns instead of resolving them by assumption.
3. Update the canonical artifact in English. Preserve existing compatibility text unless the Issue explicitly changes the contract.
4. Compute synchronization from the substance of the change, not the file extension:

| Changed subject | Required same-PR updates |
|---|---|
| Architecture, service boundary, infrastructure topology, or core flow | `chatnow-orienting` and every affected reference under `.agents/skills/chatnow-orienting/references/` |
| Test architecture, layers, tags, commands, fixtures, case IDs, or test workflow | `chatnow-orienting` where architecture context changes, plus affected `chatnow-testing` instructions and references |
| Mandatory engineering workflow or policy | Every Skill and template that teaches or enforces that workflow |
| Skill trigger or interface | The Skill plus matching `agents/openai.yaml` metadata |

A follow-up Issue is not a substitute for these same-PR updates. Name the exact affected paths.

5. Check every relative link, anchor, repository path, and command against the target commit. Remove stale links; do not link to a path or capability that does not exist.
6. Review the full PR diff for contradictory status labels, duplicated facts, missing Skill synchronization, language violations, and claims unsupported by executable evidence.

## Language contract

- Write Skills, engineering references, API and operations documentation, automation, identifiers, new code comments, and new log messages in English.
- Write Issue and PR titles in English. Write authored Issue and PR body prose in Chinese; preserve required English headings, field names, code, commands, and machine markers.
- Write commit messages in English Conventional Commits.
- Do not rewrite existing Chinese comments merely for translation without an Issue-local reason.

## Canonical-artifact rule

Extend the existing canonical document or Skill. Do not create a duplicate README, quick-reference, changelog, installation guide, migration narrative, process-history file, or stale status snapshot to explain the same facts. Active rollout or compatibility instructions belong in the canonical change document and must carry target version, date, and status.

## Output contract

Report:

1. target version line, commit, document status, and date;
2. executable evidence inspected and unresolved contradictions;
3. canonical files changed;
4. exact same-PR Skill, reference, and template updates, or `None` with evidence that no governed subject changed;
5. language and link-integrity checks performed;
6. unverified claims retained as explicitly `Unverified` or removed.

## Stop conditions

Stop and resolve the contract before claiming documentation current when the target version is ambiguous, executable sources conflict, a material claim is unverified, a proposal is presented as implemented, links are invalid, or required same-PR Skill updates are excluded.

## Common mistakes

| Mistake | Required correction |
|---|---|
| "Only a Markdown file changed." | Classify the changed engineering fact and synchronize affected Skills. |
| "The proposal is approved, so call it current." | Keep it `Proposed` until executable evidence implements it. |
| "The README already says so." | Verify against source, contracts, executable config, tests, and CI. |
| "Update the Skill later." | Include exact affected Skill/reference paths in this PR. |
| "Add a quick guide for visibility." | Update the canonical artifact and link to it; do not create parallel truth. |
| "The link looks right." | Resolve and check the actual target and anchor at the target commit. |
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "Maintain ChatNow Documentation"
short_description: "Keep ChatNow engineering facts and Skills synchronized"
default_prompt: "Use $chatnow-maintaining-documentation to update ChatNow engineering documentation."
Loading
Loading