Repository navigation
Releases
v1.4.0
Gói phát hành chính thức: signet-1.4.0.tar.gz (định dạng mở), kiểm bằng sha256sum -c signet-1.4.0.tar.gz.sha256; danh mục thành phần kèm giấy phép (SBOM CycloneDX): signet-1.4.0.cdx.json. "Source code (zip)" và "Source code (tar.gz)" do GitHub tự gắn vào mọi bản phát hành, không phải gói của đội.
Bản online tự nâng khi có bản phát hành trên main: reconciler theo thẻ vX.Y.Z mới nhất, nâng bằng scripts/nang_cap.sh (sao lưu, kiểm), lỗi sau khi sao lưu thì tự lùi về bản trước; tắt mặc định. Vá bảy cảnh báo bảo mật của pypdf công bố 30/10. Nâng tại chỗ từ v1.3.0 bằng scripts/nang_cap.sh nang.
v1.3.0
Gói phát hành chính thức: signet-1.3.0.tar.gz (định dạng mở), kiểm bằng sha256sum -c signet-1.3.0.tar.gz.sha256; danh mục thành phần kèm giấy phép (SBOM CycloneDX): signet-1.3.0.cdx.json. "Source code (zip)" và "Source code (tar.gz)" do GitHub tự gắn vào mọi bản phát hành, không phải gói của đội.
Bản cho vòng trường 01/11. Hai nguồn dữ liệu công khai có bản chụp trong repo, trang Trạng thái báo tuổi dữ liệu: thông tư của Bộ GD&ĐT về giáo dục đại học từ Công báo (nạp thành văn bản đến) và lịch nghỉ lễ, Tết chính thức cho hạn gợi ý giao việc. Trợ lý hỏi đáp tự giới thiệu, chỉ cách dùng theo hướng dẫn sử dụng, từ chối câu ngoài phạm vi, hiểu câu nối tiếp, đếm việc và văn bản của chính người hỏi; tùy chọn viết câu trả lời qua API ngoài chuẩn OpenAI. Thêm cảnh báo vận hành qua Alertmanager vào chuông của quản trị đơn vị, tự động hóa Node-RED và wiki nội bộ DokuWiki (đăng nhập Keycloak, tắt mặc định), truy vết phân tán Jaeger (profile trace), kênh SMS, Zalo; tiếng Anh cho sổ đăng ký, văn bản đi và Đơn nghỉ phép; trang Dựng form cho quản trị; hướng dẫn vận hành tiếng Anh. Log tập trung thu cả Meilisearch; bộ che thông tin cá nhân bắt cả số di động viết liền sau ĐT, SĐT. Nâng tại chỗ từ v1.2.1, rồi nạp nguồn công khai bằng python3 scripts/moc.py du-lieu-mo nap; bản cài cũ còn đặt MOC_TRUSTED_PROXY là một dải cố định thì đổi tay sang auto (#211).
Toàn bộ ghi chép thay đổi của 1.3.0 (39 mục)
Đã thêm
- Truy vết phân tán bằng Jaeger qua APISIX, svc-files, svc-workflow (profile
trace, tắt mặc định) (#364). - Kênh thông báo SMS, Zalo tắt mặc định; mỗi người tự bật ở cuối chuông thông báo, quản trị nhập số điện thoại (#365).
- Cảnh báo của Prometheus qua Alertmanager thành thông báo ở chuông (và kênh ngoài) của quản trị đơn vị (#284).
- Wiki nội bộ DokuWiki ở
/wiki/(profilewiki, tắt mặc định): đăng nhập Keycloak, mỗi đơn vị một không gian (#367). - Sổ đăng ký văn bản đến, đi xem và in bằng tiếng Anh khi người in chọn giao diện tiếng Anh (#398).
- Dữ liệu công khai: 4 thông tư Bộ GD&ĐT từ Công báo, nạp khi
make seed; trang trạng thái báo tuổi dữ liệu (#424). - Trang Dựng form cho quản trị đơn vị: khai trường, xem trước, tải tệp JSON Schema cho form của ứng dụng (#303).
- Văn bản đi bằng tiếng Anh: người soạn chọn ngôn ngữ, PDF giữ thể thức NĐ 30 với phần cố định tiếng Anh (#398).
- Giao diện tiếng Anh cho Đơn nghỉ phép, cả form dựng từ JSON Schema, chung ngôn ngữ với Văn phòng điện tử (#398).
- Tự động hóa Node-RED ở
/tu-dong/(profiletu-dong, tắt mặc định): đăng nhập Keycloak, chỉ người vận hành (#366). - Robot của đơn vị cho flow Node-RED gọi API, hai flow mẫu: văn bản sắp hạn lúc 07:00, văn bản Hỏa tốc (#366).
- Hướng dẫn vận hành bằng tiếng Anh
docs/van-hanh.en.md; README.en.md trỏ sang bản này (#59). - Nhãn "Nguồn công khai" trên trang văn bản nạp từ nguồn mở; trang Trạng thái liệt kê nguồn và tuổi dữ liệu (#426).
- Trang Hỏi đáp: gợi ý theo loại câu, câu nối tiếp, dòng "Đã hiểu là…", nói rõ trợ lý trả lời được gì (#422).
- Trợ lý hỏi đáp viết câu trả lời qua API ngoài chuẩn OpenAI (
MOC_ASK_API=openai, tắt mặc định), khóa qua két (#430). - Nguồn công khai B: lịch nghỉ lễ, Tết, nghỉ bù chính thức 2026–2027 cho hạn gợi ý giao việc, có bản chụp (#427).
- Trợ lý hỏi đáp tự giới thiệu, chỉ cách dùng theo hướng dẫn, từ chối câu ngoài phạm vi, ghép câu nối tiếp (#423).
- Trợ lý hỏi đáp đếm việc trong Hộp việc và số văn bản bằng quyền người hỏi, không qua mô hình (#441).
- Bộ câu đánh giá trợ lý thêm 3 câu trên thông tư thật của nguồn công khai A, đo riêng (loại
cong_khai) (#446).
Đã sửa đổi
- Log tập trung thu cả Meilisearch: nhật ký JSON, Vector che chuỗi truy vấn, lời lỗi, giá trị trích (#395).
- Sơ đồ kiến trúc ở README,
docs/architecture.mdvẽ lại theo lõi hiện tại, thêm kênh ngoài, Node-RED, DokuWiki (#374). - Job "Bản online" chạy ngay sau Release đợi tối đa 60 phút cho bản online nâng xong rồi mới kiểm (#344).
Đã sửa lỗi
- Tài liệu lệch mã: số dịch vụ, số test, màn demo không chạy trên bản online, ROADMAP sau
v1.2.1(#379). - Sự kiện
office.document.receivednay được ghi khi văn thư thêm văn bản đến, ứng dụng nghe nó mới nhận được (#381). - Bản cài có
scripts/demo_tat_van_phong.py; màn cắm ứng dụng trong bản cài dừng trước khi gỡ ứng dụng (#376). - Tệp OpenLineage tải từ trang Phả hệ số liệu ghi
producerlà repo Signet, không còn tên repo cũ (#376). moc app installbáo lỗi rõ với tệp form sai kiểu hay lồng quá 32 tầng (cả qua$ref), không còn lỗi 500 (#386).- Smoke không còn trượt bước hỏi đáp ngay sau khi nâng cấp hay trên bản cài tìm theo nghĩa (#360).
- Bật giảm chuyển động thì thông báo, dòng hộp việc, popover hiện ngay, không qua khung trong suốt (#391).
make demo-it-otkhông còn đỏ khi lịch sử đo của broker mới có một lần đo (#432).moc app installtừ chối form có trường trùng từ khóa của biểu thức BPMN (le,not,or…) (#405).- Tin realtime có đường dẫn là liên kết có tên với trình đọc màn hình, không còn bị axe báo
link-name(#407). release.shchạy được trên macOS: không cósha256sumthì dùngshasum -a 256, thiếu cả hai thì dừng sớm (#57).- Grafana lên trong vài giây trên đĩa ghi chậm (WSL2), không còn quá hạn healthcheck: CSDL SQLite để trong RAM (#417).
- Trợ lý hỏi đáp từ chối câu hỏi kho không có thay vì trả câu trích lạc đề;
make do-hoi-dapđỏ khi xảy ra lại (#448).
Bảo mật
MOC_TRUSTED_PROXY=auto: APISIX chỉ tin mạngmoc, không tin container ở mạngapps; bản cài cũ đổi tay (#211).- Cảnh báo
deepmergechưa có bản vá (GHSA-gcqx-w48m-w2h4) ghi bỏ qua có hạn: gói chỉ chạy lúc dựng (#387). - Bộ che thông tin cá nhân che cả số di động viết liền sau
ĐT,SĐT,DĐ,Tel,Phone(ĐT0912…) (#58). vue-i18n11.4.14 vá GHSA-83rm-6c8r-g728 và GHSA-8rc2-428q-7ww3 của bản 11.4.13 trong Văn phòng điện tử (#421).
v1.2.1
Gói phát hành chính thức: signet-1.2.1.tar.gz (định dạng mở), kiểm bằng sha256sum -c signet-1.2.1.tar.gz.sha256; danh mục thành phần kèm giấy phép (SBOM CycloneDX): signet-1.2.1.cdx.json. "Source code (zip)" và "Source code (tar.gz)" do GitHub tự gắn vào mọi bản phát hành, không phải gói của đội.
Bản vá đúng bản đang chạy online: giao diện Lịch hạn (hộp việc xếp theo ngày hạn) cho Văn phòng điện tử, trang đăng nhập, P.A.R.A, Bảng tin, và hướng dẫn sử dụng theo vai trò có ảnh chụp các màn chính. Không thêm tính năng, không đổi API hay biến cấu hình; nâng tại chỗ từ v1.2.0.
v1.2.0
Gói phát hành chính thức: signet-1.2.0.tar.gz (định dạng mở), kiểm bằng sha256sum -c signet-1.2.0.tar.gz.sha256; danh mục thành phần kèm giấy phép (SBOM CycloneDX): signet-1.2.0.cdx.json. "Source code (zip)" và "Source code (tar.gz)" do GitHub tự gắn vào mọi bản phát hành, không phải gói của đội.
Bản cho vòng trường 01/11. Quy trình thành dịch vụ của lõi: ứng dụng khai BPMN và form JSON Schema trong manifest, có ứng dụng mẫu Đơn nghỉ phép chỉ dùng lõi; Văn phòng điện tử tách khỏi lõi sau một cờ. Giao diện Liền mạch, kiểm trợ năng WCAG 2.2 AA và song ngữ; OCR bản scan, hỏi đáp trong một văn bản, thống kê kho lạnh bằng DuckDB. Vận hành: kiểm bản online qua HTTPS mỗi ngày, kịch bản nâng cấp có lùi bản, bản dev tự theo develop; trang tài liệu trên GitHub Pages.
Toàn bộ ghi chép thay đổi của 1.2.0 (66 mục)
Đã thêm
- Bản dev theo
developtại signet-dev.htechcs.com; job kiểm hằng ngày đòi đúng commit đầudevelop(#344). - Quy trình là dịch vụ của lõi: ứng dụng khai BPMN và form JSON Schema trong manifest, gọi API
/api/workflow/<tên>/…;moc app installkiểm chặt gói, cài lỗi thì lùi bản trước, gỡ giữ lịch sử đơn (#301, #320, #323, #327, #330–#333). - Ứng dụng mẫu Đơn nghỉ phép, chỉ có quy trình và form trên lõi: nhân viên gửi, trưởng phòng duyệt (#301, #303, #312).
- Trang Điều hành thống kê văn bản đã nộp lưu trong kho lạnh bằng DuckDB, kiểm băm từng gói (F3.8, #304, #313).
- Hạn gợi ý khi giao việc tránh cả ngày lễ, không chỉ cuối tuần; người vận hành khai thêm ngày nghỉ (F4.3, #280, #281).
- Cảnh báo Prometheus cho cổng API và từng thành phần, kể cả khi không có lưu lượng (F3.13, #255, #257, #274, #275).
- Kiểm HTTPS (F1.9): job kiểm bản online mỗi ngày (chứng chỉ, chuyển hướng, Keycloak sau proxy, header bảo mật); phần CI
httpsdựng hệ thống sau proxy TLS, F1.9 lên Hoàn thiện (#197, #199, #261, #262, #269, #270). - Bản scan PDF tìm được theo nội dung: OCR các trang đầu bằng Tesseract cho tìm kiếm và hỏi đáp (#253, #254, #256).
- Hỏi đáp trong một văn bản; nguồn trích mở PDF đúng trang; câu có số ký hiệu ưu tiên từ khóa (F4.2, #151, #152).
- Bản phát hành tự kiểm gói trước khi đăng: chặn bí mật, tài liệu nội bộ, tệp lớn; kiểm giấy phép (#153, #154).
- Trang đăng nhập Keycloak mang thương hiệu Signet; bản cài cũ bật bằng
moc.py realm theme(#164, #165). - Trang Danh mục ứng dụng (
/ung-dung): tên, phiên bản, lúc cài; lãnh đạo, quản trị thấy băm manifest (#166, #167). - Mốc neo sổ kiểm toán ký Ed25519, công khai bằng
moc audit anchor --publishcho người ngoài tự kiểm (#56, #158). - Tự chẩn đoán H-P-D-I thêm hình dạng theo bốn nguyên mẫu của giáo trình DX-OS, cảnh báo "rác vào, rác ra" (#168, #169).
- Cờ chất lượng số liệu (Đạt, Cảnh báo, Trượt) trên trang Điều hành và Phả hệ số liệu (F3.9, F3.11, #170, #177).
- Sơ đồ cảm biến kho (
/cam-bien): phòng tô màu theo số đo mới nhất, kèm cờ chất lượng dữ liệu OT (F3.10, #181, #183). - Kịch bản nâng cấp
nang_cap.sh: nâng, lùi về bản cũ, nâng két, kiểm; CI tập nâng cấp rồi lùi (#182, #185). - Kiểm song ngữ: e2e giao diện tiếng Anh, test đòi mọi chữ qua bảng dịch; hướng dẫn dịch (F2.9, #200, #201, #267, #268).
- Giao diện Liền mạch cho Văn phòng điện tử và trang đăng nhập: logo, phông tự phục vụ, thanh bên thu thành dải biểu tượng, hộp việc tách nhóm "Cần chú ý", chuyển động ngắn tắt được; e2e kiểm phông, ảnh (#116, #196, #214, #215).
- Log tập trung thu thêm Hasura, Keycloak, PostgreSQL, mỗi dịch vụ có luật che thông tin cá nhân (F3.14, #202, #209).
- Hướng dẫn cài khi không kéo được image từ Docker Hub: dùng mirror
mirror.gcr.io(#219, #221). - Trang văn bản giữ ngữ cảnh việc: "Về hộp việc" giữ bộ lọc, khung "Yêu cầu được giao", không gửi hai lần (#235, #236).
- e2e quét trợ năng bằng axe (WCAG 2.2 AA) trên các trang chính và Bảng tin (#246, #247, #250, #263, #264, #272).
- Tài liệu mới: trang xem nhanh
docs/README.md(tự kiểm PoF đủ 24/24), thuật ngữ, hướng dẫn sử dụng theo vai trò, trang API REST sinh từ OpenAPI (#307, #308, #309, #319, #340, #341, #343). - Trang Tài liệu API
/tai-lieu-api/bằng Swagger UI: API lõi và API Văn phòng điện tử, đăng nhập để gọi thử (#357). - Giao diện tiếng Anh cho Không gian cá nhân và Bảng tin, chung ngôn ngữ đã chọn với Văn phòng điện tử (#306, #337).
- Trang tài liệu Docusaurus đọc thẳng
docs/, tìm kiếm tiếng Việt, không gọi CDN, đăng lên GitHub Pages (#308, #342). COPYRIGHT.txt: bản quyền và bảng phần mềm thượng nguồn, sinh từDEPENDENCIES.mdbằngmake copyright(#347).
Đã sửa đổi
- Kiểm bản online chạy thêm ngay sau mỗi lần phát hành: bản online chưa nâng lên thẻ mới thì đỏ ngay (#344, #345).
- Tách mã Văn phòng điện tử khỏi lõi: dời mã chung và câu GraphQL riêng của Văn phòng, gắn phần Văn phòng sau một cờ; tắt thì lõi vẫn chạy;
make demo-tat-van-phongkiểm trong CI, không đụng bản cài khác (#302, #315, #318, #328, #329). - Lịch phiên bản: v1.2.0 cho vòng trường, bản nộp chấm 03/12 đổi thành v1.3.0 (#179, #180, #354).
- Ứng dụng cách ly khỏi mạng lõi: chỉ tới được cổng APISIX, gọi lõi qua cổng như trình duyệt (#207, #208).
- Ảnh giao diện trong README chụp lại theo giao diện Liền mạch; CI lưu ảnh màn hình e2e ở mọi lần chạy (#218, #220).
- Không gian cá nhân theo giao diện Liền mạch; sơ đồ cảm biến, Phả hệ dùng được trên điện thoại (#235, #237, #239).
- Hỏi đáp hội đồng: thêm câu 14–18, sửa câu 1, 4, 5, 12, 13 cho khớp phần đã làm (#311, #324, #325, #335, #338).
- Tài liệu: ClamAV quét sau cổng API, không kho cách ly; chỉ svc-files, svc-workflow đọc bí mật từ két (#338, #339).
- Phông Be Vietnam Pro lấy từ gói npm thay vì lưu trong repo, vẫn tự phục vụ; dịch vụ mới
keycloak-fonts(#305, #314).
Đã sửa lỗi
- Reconciler dừng, chạy lại cả profile thêm của bản cài (
MOC_EXTRA_PROFILES, nhưtunnel) khi áp commit (#351). - Id việc, phiên quy trình gửi lên được kiểm dạng trước khi ghép vào đường dẫn REST của Flowable (#330, #331).
- Hoàn thành việc không còn báo lỗi khi Flowable gặp khóa lạc quan hay deadlock; tự gọi lại (#189, #190, #316, #317).
- Thanh bên không mở lại che trang sau khi bấm chọn mục; viền focus mục menu không còn bị cắt (#216, #217, #297, #298).
moc app install,remove,synckhởi động lại APISIX khi route đổi, tránh WAF hỏng lúc nạp lại nóng (#299, #300).- CI không còn đỏ với PR không đổi tệp nào (#295, #296).
- e2e không còn đỏ chập chờn khi ClamAV nạp lại chữ ký; tài liệu vận hành ghi cách xử lý ở máy thật (#287, #289, #290).
- Tài liệu: bảng mức hoàn thiện ghi đúng số test và việc CI đã chạy, có test bắt số lệch (#258, #259, #285, #286).
- Tài liệu: Prometheus thu cả trạng thái thành phần, log tập trung thu 8 dịch vụ (#240, #282, #283).
- Tài liệu: bằng chứng trỏ đúng job CI, có test kiểm; đánh giá AI có số đo CI, sửa phần scan (#271, #273, #276, #277).
- Báo lỗi đọc được, hai ngôn ngữ, khi vai trò không có quyền hay máy chủ trả lỗi không lý do (#242, #243, #278, #279).
- Log tập trung không còn mất dòng đầu của dịch vụ im lâu khi kết nối tới Vector đã chết (#226, #227).
- Clone repo trên Windows không còn ra CRLF làm hỏng script và test (#244, #245).
- Cổng không còn thỉnh thoảng trả 502 cho
/v1/graphqlkhi Hasura đóng kết nối rảnh (#173, #175). - WAF không còn chặn nhầm bước đổi mã lấy token của PKCE (#162, #163).
make install: cài đủ module chodemo.py; không dừng ở bước kiểm image trên máy mới (#174, #176, #186, #187).- Hỏi đáp: hỏi liên tục không chặn nhúng văn bản mới; nhúng nền không chen lúc mô hình trả lời (#184, #188, #192, #194).
- Cảm biến đồng hồ nhanh: cờ "Giờ đo ở tương lai", không sót mất tín hiệu; sự cố ghi đúng ngày (#191, #193, #195, #198).
<html lang>theo đúng ngôn ngữ sau khi tải lại; chữ nhỏ đạt tương phản WCAG 2.2 AA (#205, #206, #212, #213).- Tài liệu cho người chấm khớp lại với mã: cài đặt, đóng góp, vận hành, kiến trúc (#233, #234, #238).
- Màn hẹp: tiêu đề, lưới, biểu đồ, khung xử lý việc không còn tràn hay cắt nút trên điện thoại (#230, #241, #251, #252).
- Quản trị đơn vị mở trang văn bản, hồ sơ, sổ đăng ký thì được đưa về sổ kiểm toán thay vì báo lỗi (#230, #241).
- Bảng tin kiểm lại quyền mỗi lần làm mới, báo lỗi quyền bằng câu đọc được thay vì lỗi GraphQL (#230, #241, #248, #249).
- Form đưa tiêu điểm về ô sai đầu tiên, trình đọc màn hình đọc được lỗi; hộp Góp ý vừa màn hình điện thoại (#248, #249).
DEPENDENCIES.mdbỏ năm thành phần chưa từng dùng (Kestra, Marquez, openlineage-python, Typer, Gotenberg) (#347).
Bảo mật
- Trang tài liệu ép serialize-javascript, tinypool, uuid lên bản vá, đóng sáu cảnh báo Dependabot (#349).
- Nuxt của Văn phòng điện tử nâng 4.5.2 → 4.6.2, đóng bốn cảnh báo Dependabot (Signet không dính) (#321, #322).
- Góp ý trong ứng dụng tự che số điện thoại, CCCD, số tài khoản, email trước khi lưu, cả góp ý đã gửi (#265, #266).
- Tải lên kiểm loại tệp theo nội dung, chặn chương trình, kịch bản; ảnh JPEG, PNG được gỡ EXIF, vị trí GPS (#149, #150).
v1.1.0
Gói phát hành chính thức: signet-1.1.0.tar.gz (định dạng mở), kiểm bằng sha256sum -c signet-1.1.0.tar.gz.sha256; danh mục thành phần kèm giấy phép (SBOM CycloneDX): signet-1.1.0.cdx.json. "Source code (zip)" và "Source code (tar.gz)" do GitHub tự gắn vào mọi bản phát hành, không phải gói của đội.
Bản cho vòng trường. Lõi Signet có thêm ứng dụng thứ hai và cắm được ứng dụng mới bằng một lệnh; cổng có tường lửa ứng dụng web; Văn phòng điện tử có giao diện hồ sơ, phòng đọc và phả hệ của từng biểu đồ báo cáo.
- Ứng dụng trên lõi: Không gian cá nhân P.A.R.A (
/ca-nhan/);moc app installcài ứng dụng từ manifest mà không sửa tệp nào của lõi, ví dụ Bảng tin đơn vị (apps/bang-tin) nghe luồng sự kiện đã làm sạchcore.app_events. - Văn phòng điện tử: giao diện hồ sơ công việc, lãnh đạo phòng nộp lưu theo yêu cầu, phòng đọc xem tệp có dấu tên người xem (F3.8; nộp lưu nền đã có từ 1.0.0); phả hệ của từng biểu đồ báo cáo: biểu đồ ← khung nhìn ← bảng (F3.9, F3.11); tự chẩn đoán H-P-D-I cho lãnh đạo (F4.7); góp ý và số đo "sau" (F4.6).
- Bảo mật: WAF Coraza + OWASP CRS ở APISIX (F3.15), chặn mặc định, mỗi loại trừ có lý do và số đo; giao diện báo rõ khi cổng chặn; nâng pypdf 6.21.2 (ba GHSA) và gỡ pip khỏi image của dịch vụ.
- Dữ liệu và vận hành: API nạp lô văn bản đến; log tập trung Vector + Parseable (tắt mặc định); thông báo email; trang Trạng thái công khai; SBOM CycloneDX kèm mỗi bản phát hành.
- Kho mã: cấu hình phần mềm nguồn mở gom vào
platform/, khai giấy phép REUSE, repo đổi tênHIT-Champion/Signet, gói phát hànhsignet-X.Y.Z.tar.gz; CI chia năm phần chạy song song.
Toàn bộ ghi chép thay đổi của 1.1.0 (41 mục)
Đã thêm
- API nạp lô văn bản đến (cụm ⑤ Tầng 1):
POST /api/imports/incomingnhận NDJSON hoặc CSV cùng trường vớireceiveIncoming, kèm zip tệp đính kèm tùy chọn. svc-files xử lý nền theo mẻ; mỗi dòng đi đúng đường tiếp nhận lẻ — ClamAV, ActionreceiveIncomingthay mặt văn thư, tùy chọn vào sổ — nên vẫn cách ly đơn vị và có dòng sổ kiểm toán riêng.GET /api/imports/{id}báo đã nhận / đạt / trùng / lỗi,…/rowsbáo lỗi từng dòng. Gửi lại cùng tệp không nhân đôi (Idempotency-Key, chỉ mục chặn trùng); svc-files khởi động lại thì lô chạy tiếp. Dòng bị từ chối thì tệp đã lưu được gỡ;restrictedsai kiểu bị chặn trước khi tệp vào kho; trần byte một lô ghi vào khoMOC_IMPORT_STORE_MAX_MB; dòng được giữ khi đang làm nên hai tiến trình không làm trùng. Bảngcore.import_jobs,core.import_rows(migration 1792281602800). Lô mẫu 200 dòngseed/nap-lo/van-ban-den.csv,make demo-nap-lo. Test (đếm tĩnh): svc-files +113, db +18, scripts +12, svc-workflow +2, giao diện +2. - Tường lửa ứng dụng web ở cổng APISIX (F3.15): Coraza v3.3.3 + OWASP CRS v4.14.0 (coraza-proxy-wasm 0.6.0, ghim digest và băm) chặn tải tấn công (SQLi, XSS, duyệt thư mục, chèn lệnh, Log4Shell, tải lên
.php…) trên mọi đường trước khi kiểm token → 403 cóX-Request-Id, dòng chặn trong nhật ký mang cùng mã. Mặc định chặn,MOC_WAF=On | DetectionOnly | Off; giá trị sai bịmake upvà reconciler GitOps (trước khi dừng Signet) từ chối, và image dừng ngay lúc khởi động với dòng lỗi rõ thay vì cổng trả 503. Loại trừ CRS gỡ theo id, có lý do, chỉ trên đúng khóa: Keycloak, chữ truy vấn GraphQL, truy cập bằng IP; chữ tự do trong biến GraphQL (nội dung, trích yếu, ý kiến, ghi chú, góp ý), câu hỏi trợ lý, ô Tìm kiếm; tên tệp tải lên có' " ; = :. Dò trên 7 389 yêu cầu dựng từ toàn bộ chữ của dữ liệu mẫu: không chữ mẫu nào bị chặn nhầm (trước đó 4/21 PDF mẫu). JSON lồng sâu bị chặn trước WAF (GHSA-6gcq-wc29-5xf2). Nội dung tệp vẫn do ClamAV soi. APISIX dựng thành imagemoc/apisix, 4 worker (MOC_APISIX_WORKERS); smoke thêm 7 kiểm, có tên tệp và nội dung hành chính thật phải qua (platform/apisix/README.md, mục WAF). - Khai giấy phép theo chuẩn REUSE:
REUSE.tomlkhai Apache-2.0 cho các tệp không chèn được header (JSON, ảnh, PDF, tài liệu, dữ liệu mẫu),LICENSES/Apache-2.0.txtlà bản sao củaLICENSE;reuse lint5.0.2 đạt, 482/482 tệp có thông tin bản quyền và giấy phép..env.examplemang header giấy phép,make license-checkkiểm cả tệp này (PoF #2). - README (cả bản tiếng Anh) có mục "Cấu trúc thư mục": mỗi thư mục chứa gì, mã đội tự viết nằm đâu, các tác tử AI (F4.1–F4.4) ở tệp nào, test của từng phần ở đâu.
- Tài liệu đánh giá AI
docs/danh-gia-ai.md: với đọc văn bản đến, trợ lý hỏi đáp, gợi ý giao việc và bộ che thông tin cá nhân (F4.1–F4.4) — mục đích, mô hình và công cụ kèm phiên bản, giấy phép (trỏDEPENDENCIES.md), dữ liệu đo và cách làm nhãn, lệnh đo lại, số đo kèm ngày, máy và nguồn, phần chưa đo, giới hạn, cơ chế an toàn kèm tệp mã. Thêm lần đo trợ lý hỏi đáp trên bản online (23/10/2026, Qwen3-1.7B và Qwen3-Embedding-0.6B trên CPU): recall@3 16/16, 0 nguồn bị cấm, câu trả lời của mô hình qua kiểm 16/16, p50 8,9 giây. Bảng Tài liệu của README (cả bản tiếng Anh) có thêm dòng này. - Hồ sơ chất vấn:
docs/du-thi/hoi-dap-hoi-dong.mdgồm 13 câu hội đồng dễ hỏi (lên 100.000 người dùng, nguồn mở và khóa nhà cung cấp, lõi dùng lại cho ứng dụng khác, bảo mật, AI bịa và dữ liệu ra ngoài, sao lưu và tự phục hồi, chạy không Internet, chi phí, giấy phép, việc chưa làm), mỗi câu trả lời kèm đường dẫn, lệnhmake, bước CI làm bằng chứng.docs/demo-script.mdthêm mục "Phương án dự phòng" (mất mạng, hỏng laptop, AI chậm, TOTP không qua, bước demo lỗi; máy dự phòng chạy tại chỗ không cần Internet, video) và checklist T-1 ngày, T-1 giờ, T-5 phút. - Bảng mức hoàn thiện
docs/muc-hoan-thien.md: 43 tính năng F1.1–F4.6, mỗi tính năng một mức (Hoàn thiện 32, Dùng được 5, Minh họa 2, Một phần 1, Chưa làm 3; định nghĩa ở đầu tệp) kèm bằng chứng — tệp test và số hàm test đếm tĩnh (tổng 1 425, cách đếm ghi rõ), bước CI, màn demo hay kịch bản e2e — và hạn chế đã biết. Độ phủ 29 năng lực của 7 cụm dịch vụ Tầng 1 theo đề: 17 hoàn thiện, 3 chưa có (kịch bản serverless, API nạp lô, trục streaming sự kiện). Lệnh đếm lại, kiểm lại ở cuối tệp. - Thông báo đa kênh: ngoài chuông trên web,
svc-workflowgửi thêm email (SMTP, STARTTLS/SSL) tới địa chỉ trong danh bạ và tin tóm tắt lên webhook (Mattermost, Slack, ntfy) khi đặtMOC_SMTP_HOST,MOC_NOTIFY_WEBHOOK_URL— mặc định tắt. Hộp thư đicore.notification_deliveriestạo cùng giao dịch với thông báo, gửi ở nền, thử lại tối đa 5 lần có giãn cách, mỗi lần ghi sổ kiểm toán; webhook không có tên người, không có văn bản hạn chế; nhật ký không có địa chỉ email, URL. Mailpit (profilemail) làm hộp thư thử cho demo. Test svc-workflow +41, scripts +8. - Chuỗi cung ứng:
make sbomsinh SBOM CycloneDX của cây mã nguồn bằng Syft 1.54.1 (image ghim digest), bản phát hành đính kèmmoc-X.Y.Z.cdx.jsoncùng.sha256;make license-audit(scripts/license_audit.py, chỉ thư viện chuẩn) kiểm giấy phép của mọi gói kể cả gói gián tiếp theo chính sách củaDEPENDENCIES.md, gói chưa rõ hay ngoài chính sách cần ngoại lệ có lý do trong.github/license-exceptions.json. Job CI "Giấy phép (PoF #2)" chạy cả hai: 769 gói (npm 690, Python 73, action 6) đều đạt, 22 gói qua nhờ ngoại lệ.SECURITY.md: phiên bản được hỗ trợ, báo lỗ hổng riêng tư qua GitHub, thời gian phản hồi, phạm vi kể cả bản chạy thử trực tuyến. Test scripts +22. - Trang công khai Trạng thái hệ thống
/trang-thai(không cần đăng nhập, tự làm mới mỗi 30 giây): tình trạng chung và từng thành phần theo tầng người dùng → lõi → quy trình → dữ liệu → trí tuệ nhân tạo, phiên bản, thời gian chạy, giờ sao lưu gần nhất, trợ lý AI bật hay tắt kèm tên mô hình; có đường tới từ trang đăng nhập lỗi, chân trang cổng xác thực, thanh bên.GET /api/statuscủasvc-filesgom ở phía máy chủ (lưu đệm 10 giây cho mọi người, mỗi lần dò tối đa 3 giây), chỉ trả nhãn cố định, không tên máy, địa chỉ hay số liệu; APISIX giới hạn 30 lần/phút mỗi IP (MOC_RATE_STATUS_PER_MIN).moc backup createghi dòngsystem.backed_upvào sổ kiểm toán. Test svc-files +36, office +9, e2e +1. - Ứng dụng thứ hai trên lõi, Không gian cá nhân P.A.R.A (
/ca-nhan/,apps/ca-nhan): mỗi người cất tệp của mình trong bốn thư mục Dự án, Lĩnh vực, Tài nguyên, Lưu trữ — tải lên quasvc-files(ClamAV), chuyển, tải về; client Keycloak riêngapp-ca-nhan, cùng phiên SSO với Văn phòng điện tử; schema riêngpersonalcó quyền đến từng dòng, mỗi lần xếp, chuyển vào sổ kiểm toán của lõi. Không sửa dòng nào trongservices/; cách thêm một ứng dụng:docs/them-ung-dung.md. Bản cài cũ thêm client bằngmoc realm clients(make seedcũng gọi);make demo-ca-nhan. - Góp ý và số đo "sau" theo đặc tả §8 (F4.6): nút Góp ý trên thanh trên của Văn phòng điện tử — mức hài lòng 1–5, vài dòng, màn hình đang dùng tự gắn dạng khuôn đường dẫn (không id, không chuỗi truy vấn); bảng
office.feedbackcách ly theo đơn vị, người gửi chỉ thấy góp ý của mình, lãnh đạo và quản trị đơn vị xem danh sách (không có người gửi) và tổng hợp theo màn hình ở trang Góp ý; CSDL chặn gửi dồn (3 góp ý mỗi 10 phút, 20 mỗi 24 giờ); góp ý không gắn sổ kiểm toán. Trang Số đo cho lãnh đạo đơn vị vàmake do-so-lieu-sau: thời gian từ văn bản đến tới khi giao xử lý (trung vị, p90), tỷ lệ xử lý quá hạn, 5 lần tìm lại văn bản cũ qua API (độ trễ hệ thống), số bước chuyển tay so sánh định tính; cột "trước" ghi chưa đo, số trên đơn vị mẫu (core.tenants.sample_data) ghi rõ là dữ liệu mẫu. Cách đo:docs/so-lieu-sau.md. Test db +30, office +21, scripts +16. - Log tập trung (F3.14, profile
logs, tắt mặc định): tệp compose phủplatform/logs/docker-compose.logs.ymlđổi driver log của APISIX, app-office, app-ca-nhan,svc-files,svc-workflowsang fluentd, gửi Vector 0.59.0 rồi Parseable v3.2.4 (chỉ nghe 127.0.0.1, bỏ mọi capability, mật khẩu domake env,make uphaymake logs-upsinh, mật khẩu rỗng thì không mở cổng, giữ `MOC_LOGS_RETENTION_D...
v1.0.0
Gói phát hành chính thức: moc-1.0.0.tar.gz (định dạng mở), kiểm bằng sha256sum -c moc-1.0.0.tar.gz.sha256. "Source code (zip)" và "Source code (tar.gz)" do GitHub tự gắn vào mọi bản phát hành, không phải gói của đội.
Bản cho vòng trường. Văn phòng điện tử chạy đủ luồng văn bản đến và văn bản đi theo NĐ 30/2020 trên lõi dùng chung (Keycloak, APISIX, Hasura, Flowable), dựng từ mã nguồn bằng make.
- Văn bản đến: kiểm dịch ClamAV, poka-yoke ba lớp, vào sổ, chỉ đạo, xử lý, nhắc hạn, thông báo realtime.
- Văn bản đi: soạn, duyệt, ký, cấp số, phát hành PDF có mã QR; sổ đăng ký đến / đi in được; liên thông giữa các đơn vị.
- Tin cậy: sổ kiểm toán chuỗi băm neo ra kho không xóa được, cổng xác thực văn bản công khai, văn bản hạn chế mã hóa, ký số PAdES (chỉ minh họa).
- AI: đọc văn bản đến, trợ lý hỏi đáp có trích nguồn, gợi ý giao việc; che thông tin cá nhân trước khi gửi mô hình.
- Vận hành: cài ra ngoài thư mục mã nguồn, sao lưu và khôi phục một lệnh, GitOps tự phục hồi, két bí mật OpenBao, giám sát, Cloudflare Tunnel.
- CI dựng toàn hệ thống trên mọi thay đổi rồi chạy
make seed→make smoke→make e2ecùng các màn demo.
Toàn bộ ghi chép thay đổi của 1.0.0 (110 mục)
Đã thêm
- Hộp việc của
giamkhaokhông còn trống saumake seed: có công văn khẩn 152/ĐT-ĐH chờ xử lý và dự thảo phúc đáp bị tổ trưởng trả lại chờ sửa — giám khảo đăng nhập là thấy ngay luồng làm việc của chuyên viên. - Cloudflare Tunnel (F1.9, profile
tunnel, tùy chọn): máy không có IP công khai (laptop, máy ở nhà) ra Internet có HTTPS mà không mở cổng nào — dịch vụcloudflared(cloudflare/cloudflared:2026.10.0, Apache-2.0, ghim digest) gọi ra Cloudflare và chuyển yêu cầu vào APISIX qua mạng Docker; token đọc từ tệp ngoài repo (MOC_TUNNEL_TOKEN_FILE, mặc định/home/moc/cloudflared-tunnel). Biến mớiMOC_EXTRA_PROFILES(vdtunnel):make up/down/ps/logskèm các profile này,make installghiCOMPOSE_PROFILES=core,app,<…>cho bản cài. Cổng APISIX: proxy tin cậy nóihttpsmà không gửiX-Forwarded-Port(Cloudflare không gửi) thì route Keycloak nhận cổng 443, không phải 9080 — không thì không đăng nhập được qua tunnel.docs/trien-khai.mdmục 5b; test scripts +7. - README tiếng Anh (
README.en.md, F2.11): dịch đúng README.md (bài toán, tính năng, trợ lý AI, bằng chứng 4 nguyên lý, kiến trúc, cài đặt, vận hành, kiểm thử), liên kết hai chiều ở đầu hai tệp. - Giới hạn tốc độ ở cổng APISIX (F1.2), vượt thì trả 429: đường nhận mật khẩu và cấp token theo địa chỉ IP (
MOC_RATE_LOGIN_PER_MIN, mặc định 60/phút), GraphQL và tệp theo phiên đăng nhập (MOC_RATE_API_PER_MIN, mặc định 300/phút). Giao diện báo "thao tác quá nhanh" thay cho lỗi chung;make smokethêm 3 kiểm tra. - CI chạy kiểm thử thật trên mọi PR: test đơn vị dịch vụ, test schema và quyền trên PostgreSQL + Hasura, dựng toàn hệ thống rồi
make seed→make smoke→make e2e; quét bí mật trong lịch sử commit (gitleaks) và lỗ hổng phụ thuộc (OSV-Scanner); kiểm workflow bằng actionlint. make install PREFIX=/opt/mocvàmake uninstall: cài ra ngoài thư mục mã nguồn — image của đội gắn thẻ phiên bản, compose và cấu hình chép sangPREFIX, tự kiểm bản cài không trỏ về mã nguồn; cài lại là nâng cấp, giữ.env. CI chạy smoke từ bản cài (F1.8, PoF #4).- Tài liệu API (
docs/api/, F1.10): hướng dẫn lấy token và gọi GraphQL, REST qua cổng; schema GraphQL mà từng vai trò thấy, bảng vai trò × truy vấn/thao tác ghi, OpenAPI củasvc-filesvàsvc-workflow— xuất từ hệ thống đang chạy bằngmake api-docs, CI báo lỗi khi tài liệu lệch mã (#24). - Văn bản đi (F2.4): chuyên viên soạn dự thảo (nội dung, nơi nhận, trả lời văn bản đến, tài liệu kèm theo), xem trước PDF đúng thể thức NĐ 30/2020; quy trình BPMN
van-ban-di— lãnh đạo phòng duyệt, lãnh đạo đơn vị ký, trả lại ở bước nào cũng về người soạn sửa rồi trình lại (ActionsubmitOutgoing); văn thư cấp số đi liên tiếp theo năm, ký hiệu theo NĐ 30 (05/TB-CNTT,05/CNTT-ĐT) trong một giao dịch;svc-filesdựng bản phát hành bằng WeasyPrint có mã QR, quét ClamAV rồi lưu, SHA-256 ghi vào CSDL và sổ kiểm toán (#29). - Cổng xác thực văn bản (F2.13):
/api/verifykhông cần đăng nhập, mỗi lần đúng một văn bản theo mã tra cứu hoặc SHA-256, APISIX giới hạn theo IP (MOC_RATE_VERIFY_PER_MIN); trang/xac-thucmở thẳng từ mã QR, thả tệp PDF thì trình duyệt tự tính SHA-256 — tệp không tải lên — và báo khớp hay đã bị sửa (#30). make seedthêm 6 văn bản đi ở đủ các bước;make smokethêm 5 kiểm tra (tổng 23);make e2ethêm kịch bản văn bản đi: soạn, trả lại, trình lại, ký, phát hành, người ngoài kiểm tệp ở cổng xác thực.- Thông báo realtime (F2.5): sau mỗi bước, người phải làm việc kế tiếp nhận thông báo — việc mới (kèm ý kiến khi bị trả lại), văn bản đã phát hành, đã báo kết quả xử lý. Thông báo lưu ở
core.notifications(mỗi người chỉ đọc của mình), Centrifugo đẩy qua WebSocket/realtimetới kênh riêng của từng người, tự kiểm token Keycloak. Giao diện có chuông thông báo, tin hiện ở góc màn hình, hộp việc và trang văn bản tự tải lại (#31). - Nhắc hạn (F2.3): mỗi bước trong hai quy trình BPMN có timer
R2/${slaDuration}(MOC_SLA_DURATION, thậtPT24H, demoPT1M); quá một thời hạn thì nhắc người phải làm, quá hai thì báo lãnh đạo của họ, ghi vào dòng thời gian. Văn bản đến qua hạn giải quyết thì báo người xử lý và lãnh đạo (#32). make smokethêm 5 kiểm tra (tổng 28): token giả bị đóng kết nối, tin việc mới tới qua WebSocket, thông báo lưu đúng người, nhắc hạn và báo lãnh đạo khiMOC_SLA_DURATIONngắn (CI đặtPT20S);make e2ethêm kịch bản hai người dùng cùng lúc: chuyên viên trình, tổ trưởng thấy tin và việc mới không phải tải lại trang.- Sổ kiểm toán chuỗi băm (F2.12):
svc-filesđịnh kỳ neo hash đầu chuỗi ra bucket lạnhmoc-coldbật S3 Object Lock, chế độ COMPLIANCE — trong hạn giữ không ai xóa, ghi đè hay rút ngắn hạn được, kể cả quản trị kho.make audit(scripts/moc.py audit verify) tính lại cả chuỗi bên ngoài CSDL, so với các mốc đã neo và với hash của văn bản: sửa một dòng thì chỉ ra dòng đó, sửa rồi tính lại cả chuỗi thì chỉ ra khoảng dòng bị viết lại, đổi hash văn bản phát hành thì chỉ ra văn bản đó;audit anchor --to <tệp>giữ thêm một bản mốc ngoài máy chủ. Màn "Sổ kiểm toán" cho lãnh đạo, quản trị đơn vị: ai, lúc nào, làm gì, cột nào đổi, dòng đã neo chưa — không lộ nội dung văn bản hạn chế (#33). - SeaweedFS nằm riêng mạng
storage, chỉsvc-filestới được, và tắt HTTP của filer: gọi thẳng filer thì bỏ qua được khóa ghi của bucket. Tắt gửi thống kê ẩn danh của SeaweedFS ra ngoài (#33). make smokethêm 3 kiểm tra (tổng 31): neo rồi kiểm cả sổ, mốc neo không xóa được, lãnh đạo thấy hash văn bản vừa phát hành trong sổ;make e2ethêm kịch bản lãnh đạo xem sổ kiểm toán.- Poka-yoke ba lớp cho tiếp nhận văn bản đến (F2.2) theo một JSON Schema dùng chung,
schemas/van-ban-den.json: form kiểm bằng Ajv biên dịch sẵn lúc build (không cầnunsafe-evaltrong CSP); Action mớireceiveIncomingcủasvc-workflowkiểm lại bằngjsonschemarồi tra loại văn bản, tệp, văn bản trùng; PostgreSQL chặn lần cuối bằng ràng buộc mớidocuments_in_symbol,documents_in_issuer,documents_in_summary,documents_in_dates. Ngoài độ dài, khoảng trắng, ngày: chặn ký tự ẩn và chữ dạng Unicode tổ hợp (chép từ PDF hay dính, làm cùng một văn bản lọt qua chặn trùng); form tự dọn những thứ này trước khi gửi. Hai lớp đầu trả lỗi từng trường cùng một bộ mã; ba lớp chạy chung bộ ca thửschemas/van-ban-den.cases.json(#34). make testchạy thêm test kiểm form (apps/office, Node 24);make smokethêm 4 kiểm tra (tổng 35): văn thư không ghi thẳng được bảng văn bản, svc-workflow trả lỗi từng trường, chặn tiếp nhận trùng, CSDL chặn khi ghi thẳng bằng quyền quản trị;make e2e: form sai bị chặn trên trình duyệt, không gửi gì đi (#34).- Sổ đăng ký văn bản đến / đi theo năm (F2.8), in được theo NĐ 30/2020, Điều 16, 22:
svc-filesdựng sổ đúng các cột của mẫu sổ ở Phụ lục IV (sổ đến 9 cột, sổ đi 10 cột) —GET /api/registers/{in|out}/{năm}cho giao diện,…/pdfra bản in A4 ngang có bìa, bảng kẻ, chỗ văn thư ký để ký nhận và đóng sổ. Chỉ văn thư, lãnh đạo đơn vị xem được. Sổ luôn liền số từ 01, kể cả văn bản hạn chế người in không được đọc: dòng đó chỉ có số, ngày, số ký hiệu; bìa sổ báo nếu thiếu số. Mỗi lần in ghi vào sổ kiểm toán (register.printed: ai in, sổ nào, bao nhiêu dòng, bao nhiêu dòng bị che). Trang/so-dang-kyxem sổ theo năm, mở văn bản từ dòng sổ, in PDF (#35). make smokethêm 3 kiểm tra (tổng 38): sổ đến, sổ đi có văn bản vừa vào sổ, phát hành và liền số; in sổ ra PDF, lần in vào sổ kiểm toán; chuyên viên không xem được sổ.make e2ethêm kịch bản văn thư xem sổ, in PDF (#35).- Tìm theo nội dung (F2.7): ngoài số ký hiệu, trích yếu, cơ quan ban hành, tìm được cả nội dung văn bản đi và chữ trong tệp PDF đính kèm.
svc-filesđọc lớp chữ của PDF đã gắn vào văn bản ở vòng nền (pypdf, trong tiến trình con giới hạn bộ nhớ, CPU và thời gian — PDF dựng có ý đồ không làm treo dịch vụ), lưu ở bảng mớicore.file_texts(không vai trò người dùng nào đọc được) để dựng lại chỉ mục không phải đọc lại tệp; tệp tải lên trước đó cũng được đọc bù. Văn bản hạn chế không đưa nội dung vào chỉ mục. Kết quả chỉ khớp nội dung có nhãn "Khớp trong nội dung". Bản scan không có lớp chữ được đánh dấu để dành OCR (F4.1).make seed: văn bản đến mẫu có tệp PDF tiếng Việt thật thay cho tệp rỗng (#36). - Tìm kiếm: mọi từ trong câu tìm phải khớp (trước đây Meilisearch bớt dần từ khi ít kết quả, nên một công văn dài chỉ chứa vài từ phổ biến cũng hiện ra). Đổi API:
GET /api/searchbỏoffset/next_offset, thay bằngcursor/next_cursor— vị trí trang sau mã hóa, gắn với người tìm và câu tìm, để không đếm ngược ra số văn bản mình không được đọc có chứa một từ (#36). make smokethêm 2 kiểm tra (tổng 40): tìm được công văn theo chữ chỉ có trong tệp PDF; tệp của văn bản hạn chế không bị đọc chữ, không tìm được theo nội dung.make e2e: chuyên viên ...
v0.1.0
Gói phát hành chính thức: moc-0.1.0.tar.gz (định dạng mở), kiểm bằng sha256sum -c moc-0.1.0.tar.gz.sha256. "Source code (zip)" và "Source code (tar.gz)" do GitHub tự gắn vào mọi bản phát hành, không phải gói của đội.
Bộ khung dự án: giấy phép Apache-2.0, dựng từ mã nguồn bằng Make và Docker Compose, cấu hình qua .env, CI kiểm header giấy phép, gói phát hành .tar.gz, mẫu báo lỗi và PR, tài liệu.
Toàn bộ ghi chép thay đổi của 0.1.0 (32 mục)
Đã thêm
- Khung dự án nguồn mở: giấy phép Apache-2.0 (toàn văn + thông báo mục đích + header từng tệp).
- Quy trình dựng từ mã nguồn qua
Makefilevà Docker Compose (profilecorecho Tầng 1,appcho Tầng 2). - Cấu hình tách khỏi mã nguồn qua
.env.example. - CI kiểm tra header giấy phép và tính hợp lệ của Compose.
- Quy trình phát hành sinh gói
.tar.gztheo thẻ phiên bản. - Mẫu báo lỗi / đề xuất tính năng và mẫu pull request.
- Tài liệu: README, CONTRIBUTING, CODE_OF_CONDUCT, ROADMAP, DEPENDENCIES, tóm tắt đề bài OLP 2026, bảng tự chấm PoF.
- Tài liệu nghiên cứu trước khi có đề thi, lưu ở
docs/nghien-cuu/: chiến lược dự thi, hướng triển khai, và bản kiểm chứng chủ đề 2026 (giáo trình DX-OS, giấy phép công cụ ứng viên, kho mã các đội mùa trước). - Đặc tả nghiệp vụ DX-Safety (
docs/nghien-cuu/dac-ta-dx-safety.md): sổ sự cố an toàn xưởng, bàn phê duyệt ngoại lệ, đồng hồ H% đo từ dữ liệu vận hành, kịch bản demo. - Dự báo đề thi tháng 11/2026 (
docs/nghien-cuu/du-bao-de-thi-2026.md): mô hình ba mùa, lĩnh vực và chuẩn có thể bị ép, kiến trúc gói lĩnh vực để phòng; bổ sung bảng ba mùa vào chiến lược dự thi. - Kế hoạch 4 tuần cho vòng cấp trường (
docs/nghien-cuu/ke-hoach-vong-truong.md): phạm vi tối thiểu, lịch tuần, phân vai, cổng kiểm tra và danh sách cắt. - Dự báo đề thi, đợt bằng chứng 2: tác giả chủ đề và FDS, hộp cát Alpha Corporation kèm CSV mẫu, đối chứng bài giới thiệu 2025; đổi gói lĩnh vực vòng trường sang DX-Ticket theo hộp cát.
- Phân tích đề thi chính thức OLP PMNM 2026 (
docs/olp-2026-de-thi.md), kế hoạch phát triển theo phase (docs/ke-hoach-phat-trien.md) và quy trình Git của dự án (docs/git_flow.md). DEPENDENCIES.md: danh mục đầy đủ phần mềm thượng nguồn kèm phiên bản ghim, giấy phép, cách nạp, và các thành phần đã loại vì không mang giấy phép OSI.- Đặc tả sản phẩm (
docs/dac-ta-san-pham.md): Văn phòng điện tử quản lý văn bản đến / đi theo Nghị định 30/2020/NĐ-CP và cổng xác thực văn bản bằng mã QR; so sánh phương án, đối chiếu kho mã công khai của các đội khác, căn cứ pháp lý, kịch bản demo. - Bản nháp mô hình dữ liệu (
docs/mo-hinh-du-lieu.md): schemacoredùng chung vàofficecủa ứng dụng, quyền theo vai trò, Hasura Actions, task BPMN, định dạng sự kiện. - Lõi Tầng 1 chạy bằng
make up: Keycloak (realmmoc, vai trò/đơn vị/phòng vào token cho Hasura), APISIX là cổng duy nhất (kiểm JWT ở biên, chặn đường quản trị, gỡ khóa quản trị Hasura từ ngoài vào), PostgreSQL + Hasura, Flowable, SeaweedFS (có kiểm khóa S3), ClamAV, Meilisearch (#13, #14, #21). - Schema
core+office, quyền 6 vai trò, sổ kiểm toán chuỗi băm; danh bạcore.usersvà hàm vào sổoffice.register_incomingcấp số đến liên tiếp trong một giao dịch (#18). svc-files: tải lên qua ClamAV vào SeaweedFS, tải xuống theo quyền, tìm kiếm Meilisearch gõ không dấu (#19, #20).svc-workflow: Hasura ActionsregisterIncoming,myTasks,completeTask; quy trình BPMNvan-ban-den(chỉ đạo → phân công → xử lý); đồng bộ danh bạ Keycloak; job đối soát (#15, #23).- Giao diện Văn phòng điện tử (
apps/office, Nuxt 4): đăng nhập SSO, hộp việc, văn bản đến, tiếp nhận có kiểm form và chặn trùng, chi tiết văn bản với dòng thời gian, xử lý việc, tìm kiếm; tiếng Việt / Anh; CSP chặt (#22). make env,make seed(2 đơn vị, 10 tài khoản, văn bản ở mọi bước),make smoke(13 kiểm tra qua cổng),make e2e(Playwright trên trình duyệt thật) (#16).
Đã sửa đổi
- Rà soát bản tóm tắt OLP 2026: sửa nguồn tham khảo, phân biệt yêu cầu BTC với đề xuất của đội, làm rõ giới hạn kiểm tra PoF và phạm vi phát triển mã nguồn riêng.
- README: phát biểu bài toán sản phẩm giải quyết (bài toán nền tảng và bài toán nghiệp vụ).
- Đổi bài toán nghiệp vụ từ luồng phê duyệt đề xuất sang quản lý văn bản đến / đi: README, kế hoạch phát triển (Phase 2–4, phân công, rủi ro), phân tích đề §6.2.
- CONTRIBUTING và mẫu pull request: quy ước nhánh, commit và phạm vi theo
docs/git_flow.md. - README, NOTICE, đặc tả sản phẩm §0: phát biểu sản phẩm theo thứ tự lõi trước, ứng dụng sau; nêu lớp tin cậy dùng chung của lõi (danh tính, quét mã độc, sổ kiểm toán chuỗi băm, API xác thực).
- Sổ kiểm toán chuỗi băm và cổng xác thực văn bản chuyển từ Should (Phase 3) lên Must (Phase 2): mã F3.5 → F2.12, F3.6 → F2.13 trong kế hoạch, đặc tả và mô hình dữ liệu.
- Kế hoạch §4: thay bảng RAM bằng danh mục tài nguyên cần có — con người, hạ tầng, tài khoản, dữ liệu, kiến thức, chi phí, việc phải có trước
v0.1.0. - Đổi tên sản phẩm từ DX-Lab sang Mộc (theo chữ "đóng mộc" — đóng dấu), vì "DX-Lab" là tên Trạm thực hành số trong chủ đề cuộc thi và trùng ứng dụng của một đội khác. Tên kỹ thuật đổi theo: Compose project, mạng và CSDL mặc định
moc; biến môi trườngDXLAB_*thànhMOC_*(ai đã tạo.envthì sửa theo); gói phát hànhmoc-<phiên bản>.tar.gz. README và mẫu issue trỏ về repoHIT-Champion/HVL. - Kế hoạch: dời
v0.1.0từ 21/10 sang 25/10 vì Phase 1 chưa bắt đầu; Phase 2 thành 26/10–08/11, Phase 3 thành 09–20/11, Phase 4 (cũng là đệm) thành 21–25/11; giữ nguyên ngày đóng băng và ngày nộp.
Đã sửa lỗi
scripts/license-header.shbỏ qua im lặng các tệp.vue,.html,.xml,.bpmn,.css,.scss,.mjs,.graphql,.lua— các tệp này giờ được kiểm tra và tự chèn header; loại tệp chưa hỗ trợ được in ra dưới dạng cảnh báo.