TECHDEV · Công cụ open-source
memgraph
Tháng trước, một team đã đảo ngược quyết định về hàng đợi mà không ai nói được vì sao thiết kế đầu tiên được chọn, bằng chứng nào đứng sau nó, hay ai đã duyệt bản thay thế. Thiết kế cũ vẫn còn cắm nửa chừng như một "fallback", lặng lẽ phụ thuộc vào thứ vừa bị thay thế. Họ chỉ phát hiện ra ở production. RAG dạng vector nhớ được văn bản. Nhưng nó không nhớ được quyết định — cái gì đã được chọn, nó dựa trên cái gì, cái gì đã mâu thuẫn với nó, và cái gì đã thay thế nó. memgraph là một đồ thị cục bộ tí hon cho đúng việc đó: mỗi quyết định, sự kiện và ràng buộc là một node có nguồn gốc, liên kết với nhau bằng quan hệ hỗ trợ, mâu thuẫn, thay thế hay phụ thuộc.
Node.js 18+ · Không phụ thuộc thư viện nào · MIT
Nó làm được gì
Một CLI Node.js duy nhất, không phụ thuộc thư viện nào. Không mạng, không server, không embedding. Nơi lưu trữ là một file JSON duy nhất, commit được ngay cạnh code của bạn.
memgraph init
memgraph add --type decision --title "Use Postgres LISTEN/NOTIFY for the queue" --source "ADR-014"
memgraph add --type fact --title "NOTIFY payloads cap at 8000 bytes" --source "Postgres docs"
memgraph link m-002 m-001 --relation contradicts
memgraph add --type decision --title "Switch the queue to Redis Streams" --source "ADR-019"
memgraph supersede m-001 m-003 --reason "payload cap makes NOTIFY the wrong tool"Các lệnh chép nguyên từ README của memgraph ("What it does"). Ba câu hỏi nó trả lời nhanh:
| Câu hỏi | Lệnh |
|---|---|
| Vì sao chúng ta quyết định thế này? | memgraph why m-003 — nguồn gốc, các node ủng hộ, mâu thuẫn, thay thế |
| Có gì đã cũ hay mâu thuẫn không? | memgraph check — mâu thuẫn chưa giải quyết, node đang sống dựa trên quyết định đã bị thay thế, vòng phụ thuộc, claim không có nguồn |
| Chúng ta đang tin điều gì? | memgraph list — mọi node, node đã bị thay thế được đánh dấu |
Dùng thử ngay
# 1. Clone
git clone https://github.com/techdevfun/memgraph.git
cd memgraph
# 2. Không cần cài gì (Node.js 18+). Tuỳ chọn: link lệnh
npm link # makes `memgraph` available everywhere
# 3. Bắt đầu một đồ thị cho project của bạn
memgraph init
memgraph add --type decision --title "Use Postgres for the queue" --source "ADR-014"
memgraph why m-001Các lệnh chép nguyên từ README của memgraph ("Try it in 3 steps").
Repo có sẵn một đồ thị mẫu nhỏ của một team — một quyết định về hàng đợi, sự kiện đã "giết" nó, bản thay thế, và một fallback còn sót lại vẫn phụ thuộc vào thiết kế đã chết. Chạy sh examples/run-demo.sh, rồi memgraph check: nó báo đúng hai vấn đề — fallback reader phụ thuộc vào một quyết định đã bị thay thế, và một câu hỏi mở không có nguồn. Mâu thuẫn giữa sự kiện payload-cap và quyết định cũ thì không bị gắn cờ: quyết định cũ đã bị thay thế, nên mâu thuẫn đó là lịch sử đã giải quyết, không phải xung đột đang sống.
Thêm lệnh
# Ghi bằng chứng và ràng buộc, không chỉ quyết định
memgraph add --type fact --title "Peak depth hit 40k jobs" --source "metrics 2026-10-12"
memgraph add --type constraint --title "Queue must survive a broker restart" --source "SLO doc"
# Liên kết chúng: supports | contradicts | supersedes | depends-on
memgraph link m-001 m-002 --relation supports
# Đầu ra machine-readable cho script và CI
memgraph why m-003 --json
memgraph check --json
memgraph list --type decision --jsonCác lệnh chép nguyên từ README của memgraph ("More commands").
Cổng CI
memgraph check thoát với mã 1 khi phát hiện lỗi, nên nó hoạt động như một cổng CI trên thư mục decisions/: một PR tạo ra mâu thuẫn, hoặc vẫn phụ thuộc vào một quyết định đã bị thay thế, sẽ fail trước khi merge.
memgraph check # thoát 1 khi phát hiện lỗi — chạy trong CI trên thư mục decisions/Hành vi lấy từ README của memgraph ("CI gate"), không phải đoạn chép nguyên.
Đây KHÔNG phải gì — và đối thủ hơn chúng ta ở đâu
- memgraph không phán xét một nguồn có đúng hay không. Như README viết: đồ thị chỉ tốt bằng những gì bạn ghi vào. memgraph không thể nói cho bạn biết một nguồn có đúng hay không — nó cho bạn biết mỗi claim đến từ đâu và đồ thị có còn đứng vững hay không. Một quyết định không có nguồn là một tin đồn có định dạng; đó là lý do
checkgắn cờ nó. - Phạm vi của nó là nguồn gốc quyết định, chỉ thế thôi. Các hệ thống RAG dạng vector nhớ văn bản, không nhớ quyết định — chúng bổ trợ cho memgraph chứ không thay thế nó. ADR tĩnh dạng markdown có ghi quyết định nhưng không truy vấn được và không có cổng CI; memgraph biến đúng những bản ghi đó thành thứ trả lời được câu hỏi.
- Khi một quyết định thay đổi, hãy thay thế (supersede) nó — đừng xoá nó. Xoá lịch sử là cách các team quay lại tranh cãi cùng một lựa chọn mỗi sáu tháng.
Mã nguồn + README trên GitHub → · Báo lỗi → · ask@techdev.fun
Giới hạn
- Đồ thị chỉ tốt bằng những gì bạn ghi vào: một quyết định không được ghi thì
checkkhông nhìn thấy, và memgraph không xác minh được một nguồn đã ghi có đúng hay không. - Roadmap trong README chưa được triển khai:
memgraph blame <file>(quyết định nào chạm vào một file hay ADR), du hành thời gian (memgraph at <date>), xuất Mermaid/Graphviz cho ADR và review, và cảnh báo--stale <days>cho quyết định có nguồn đã cũ. - Nơi lưu trữ là một file JSON cục bộ duy nhất — không có server đa người dùng, không embedding, không đồng bộ mạng. Đó là thiết kế, không phải tính năng còn thiếu, nhưng hãy biết điều đó trước khi dùng.
Giấy phép
MIT — xem LICENSE trong repository.
Công cụ liên quan
Các công cụ mã nguồn mở khác của TECHDEV: sessguard, runverdict, gheist-guard, vetgate, context-diet, ci-failure-detective, agent-seatbelt, devsecops-os, env-doctor, skill-audit, logtrim, testguard, breakcheck, keymap, ggufit, leaseguard, factfence, jsonfold
Đóng góp ý kiến
Bình chọn cho công cụ này, đề xuất tính năng, hoặc thảo luận với các vận hành khác trên bảng cộng đồng.