Distribution & PackagingPhân phối & Đóng gói
The distribution pack ships the framework toolkit only — 68 skills, 7 domain agents, hooks, schemas, platform_lib, rules, and rubrics. It ships zero character corpus: a non-removable safety filter enforced after the manifest globs drops every file that could contain real-character PII. The same source + same manifest produces a byte-identical archive every time.Gói phân phối ship chỉ bộ framework toolkit — 68 skill, 7 agent domain, hook, schema, platform_lib, rule, và rubric. Nó ship không corpus nhân vật: một safety filter không-thể-gỡ được ép sau manifest glob loại mọi file có thể chứa PII nhân vật thật. Cùng nguồn + cùng manifest tạo ra một archive byte-identical mỗi lần.
The pack pipelineQuy trình đóng gói
Four deterministic stages. Each stage is a discrete script; they compose into a single CI step triggered only on frameworks-v* tags.Bốn giai đoạn tất định. Mỗi giai đoạn là một script rời nhau; chúng kết hợp thành một bước CI duy nhất chỉ kích hoạt trên tag frameworks-v*.
pack.manifest.yamlinclude globs select toolkit filesglob include chọn file toolkit
safety_filter.pyNON-REMOVABLE PII droploại PII KHÔNG-THỂ-GỠ
build_pack.pyPAX · mtime=0 · sorted entriesPAX · mtime=0 · mục đã sắp xếp
sidecar alongside tar.gzSHA256 từng file
sidecar bên cạnh tar.gz
Stage detailChi tiết từng giai đoạn
① pack.manifest.yaml — include globs① pack.manifest.yaml — include glob
Lists repo-relative include globs that select the toolkit files: .claude/skills/orc-*/**/*, all 7 framework skill dirs, the 7 framework-domain agents, all hooks + hook-lib files, .claude/scripts/**/*, .claude/schemas/**/*, docs/rules/**/*, docs/rubrics/**/*, test fixtures, CHANGELOG, README, LICENSE. The corpus directories — docs/profiles/, docs/materials/, docs/graph/, docs/references/ — are not listed and are additionally blocked by the safety filter.Liệt kê các glob include tương đối theo repo để chọn file toolkit: .claude/skills/orc-*/**/*, toàn bộ 7 thư mục skill framework, 7 agent domain-framework, toàn bộ file hook + hook-lib, .claude/scripts/**/*, .claude/schemas/**/*, docs/rules/**/*, docs/rubrics/**/*, fixture test, CHANGELOG, README, LICENSE. Thư mục corpus — docs/profiles/, docs/materials/, docs/graph/, docs/references/ — không được liệt kê và còn bị chặn thêm bởi safety filter.
② safety_filter.py — NON-REMOVABLE backstop② safety_filter.py — chốt chặn KHÔNG-THỂ-GỠ
Applied after the manifest globs — it is a second independent check, not a replacement for careful manifesting. It drops: (a) docs/profiles/, docs/materials/, docs/graph/, docs/references/ — real-character PII; (b) any .env, credentials, private key, or secret file; (c) runtime-only state (.venv/ trees, __pycache__/, telemetry sinks). The label "NON-REMOVABLE" means it is coded into the build script — there is no config flag to skip it. A whole-pack PII scan runs after build as the closing gate.Áp dụng sau các glob manifest — là kiểm tra độc lập thứ hai, không thay thế việc viết manifest cẩn thận. Nó loại: (a) docs/profiles/, docs/materials/, docs/graph/, docs/references/ — PII nhân vật thật; (b) mọi .env, credentials, private key, hoặc file bí mật; (c) trạng thái chỉ-runtime (.venv/ tree, __pycache__/, sink telemetry). Nhãn "KHÔNG-THỂ-GỠ" có nghĩa là được code vào build script — không có flag config để bỏ qua. Một lần quét PII toàn-gói chạy sau build như gate chốt.
③ build_pack.py — deterministic archive③ build_pack.py — archive tất định
Produces a byte-identical .tar.gz from the same input every time by enforcing three determinism invariants: PAX format (portable extended headers, no platform-specific GNU extensions), mtime=0 (all entry timestamps zeroed, removing filesystem-time variance), sorted entries (alphabetical traversal order, removing OS readdir ordering). Same source + same manifest = same SHA256.Tạo .tar.gz byte-identical từ cùng đầu vào mỗi lần bằng cách ép ba bất biến tất định: định dạng PAX (header mở rộng portable, không có phần mở rộng GNU đặc thù nền tảng), mtime=0 (mọi timestamp mục bằng không, loại bỏ phương sai thời-gian filesystem), mục đã sắp xếp (thứ tự duyệt theo alphabet, loại bỏ thứ tự readdir của OS). Cùng nguồn + cùng manifest = cùng SHA256.
④ Per-file SHA256 MANIFEST — sidecar integrity④ SHA256 từng file MANIFEST — toàn vẹn sidecar
A MANIFEST sidecar lists the SHA256 of every file inside the archive. It ships alongside the .tar.gz as a separate release asset. install.sh verifies the sidecar against the downloaded archive before extracting — a single-bit corruption or substitution fails the check. The per-file hashes let consumers verify individual files after extraction without re-hashing the whole archive.Sidecar MANIFEST liệt kê SHA256 của mọi file bên trong archive. Nó ship cùng với .tar.gz như một release asset riêng biệt. install.sh xác minh sidecar theo archive đã tải trước khi giải nén — một bit bị hỏng hoặc thay thế làm kiểm tra thất bại. Hash từng file giúp người dùng xác minh các file riêng lẻ sau khi giải nén mà không cần hash lại toàn bộ archive.
What the safety filter dropsSafety filter loại cái gì
Live build outputĐầu ra build trực tiếp
The token below is injected by the showcase build pipeline with the actual output of build_pack.py from the last tagged release:Token bên dưới được build pipeline showcase chèn với đầu ra thực tế của build_pack.py từ lần release được tag gần nhất:
$ pytest -k 'pack and (determin or safety)' 6 passed, 1128 deselected in 0.90s → byte-identical tarball · per-file SHA256 MANIFEST · non-removable PII safety_filter
CI-only tagged releaseRelease được tag chỉ qua CI
The pack build runs only in CI, triggered exclusively by a frameworks-v* tag push — never by a manual run or a PR. This prevents accidental releases and ensures the artifact in the GitHub Release matches what the reproducibility check produces.Build gói chạy chỉ trong CI, chỉ kích hoạt bởi push tag frameworks-v* — không bao giờ bởi chạy thủ công hay PR. Điều này ngăn release vô tình và đảm bảo artifact trong GitHub Release khớp với kết quả kiểm tra tính tái tạo.
Workflow: frameworks-pack-release.ymlWorkflow: frameworks-pack-release.yml
Triggered on: push: tags: ['frameworks-v*']. Steps: checkout → build_pack.py → whole-pack PII scan → sha256sum MANIFEST → GitHub Release with .tar.gz + MANIFEST + install.sh as release assets. Fails the release if the PII scan flags any file.Kích hoạt trên: push: tags: ['frameworks-v*']. Các bước: checkout → build_pack.py → quét PII toàn-gói → sha256sum MANIFEST → GitHub Release với .tar.gz + MANIFEST + install.sh làm release asset. Fail release nếu quét PII đánh dấu bất kỳ file nào.
Public mirror — filtered projectionGương công khai — chiếu đã lọc
The public mirror is a filtered projection of this repo: no corpus (profiles/materials/graph/references), no private keys, same framework toolkit. It carries its own frameworks-pack-release.yml — when a frameworks-v* tag is projected, the mirror builds and publishes its own Release independently. Licensed AGPL-3.0.Gương công khai là chiếu đã-lọc của repo này: không corpus (profiles/materials/graph/references), không private key, cùng bộ framework toolkit. Nó mang frameworks-pack-release.yml riêng — khi tag frameworks-v* được chiếu, gương tự build và đăng Release độc lập. Giấy phép AGPL-3.0.
install.sh — verify then provisioninstall.sh — xác minh rồi cấp phát
The installer is a standalone shell script that ships as a separate release asset — it does not live inside the .tar.gz it verifies. It runs five phases in order, fail-fast at the first problem:Trình cài là shell script độc lập ship như release asset riêng biệt — nó không nằm trong .tar.gz mà nó xác minh. Nó chạy năm pha theo thứ tự, dừng ngay ở lỗi đầu tiên:
MANIFEST against downloaded .tar.gz — fail on any mismatchso MANIFEST với .tar.gz đã tải — fail nếu bất kỳ không khớp.claude/ — additive, no existing files removeduntar vào .claude/ của repo đích — cộng thêm, không xóa file hiện có.claude/skills/.venv/ + install packages — wires the project-local Python runtimetạo .claude/skills/.venv/ + cài gói — kết nối runtime Python cục bộ dự ántests/ + e2e/ against freshly installed copy — green before you trust the gatechạy tests/ + e2e/ trên bản vừa cài — xanh trước khi tin vào gate.claude/settings.json, hooks, or rule files with attacker-controlled content before the user notices. The verify-first order guarantees the archive is byte-for-byte identical to what the CI build produced — a tampered bundle or a partial download fails before a single file is written to disk.Tại sao xác minh SHA trước khi giải nén? Giải nén archive chưa xác minh có thể ghi đè .claude/settings.json, hook, hoặc file rule với nội dung do kẻ tấn công kiểm soát trước khi người dùng nhận ra. Thứ tự xác-minh-trước đảm bảo archive byte-for-byte giống với kết quả build CI — bundle bị giả mạo hoặc tải xuống một phần thất bại trước khi một file nào được ghi vào đĩa.Reproducibility checkKiểm tra tính tái tạo
Any user can reproduce the exact release artifact from their local clone:Bất kỳ người dùng nào cũng có thể tái tạo artifact release chính xác từ clone cục bộ của họ:
git checkout frameworks-v1.4.0.claude/skills/.venv/bin/python3 .claude/skills/_framework-shared/scripts/build_pack.pysha256sum human-analyzer-frameworks-1.4.0.tar.gzThe three determinism invariants (PAX format, mtime=0, sorted entries) ensure no OS, filesystem, or time-of-day variance affects the output. If your local SHA differs from the published one, the build inputs changed — check git status and pack.manifest.yaml version field.Ba bất biến tất định (định dạng PAX, mtime=0, mục đã sắp xếp) đảm bảo không có OS, filesystem, hoặc phương sai thời-điểm-trong-ngày nào ảnh hưởng đến đầu ra. Nếu SHA cục bộ của bạn khác với SHA đã đăng, đầu vào build đã thay đổi — kiểm tra git status và trường phiên bản pack.manifest.yaml.
Public mirror structureCấu trúc gương công khai
What the mirror containsGương chứa gì
- All 68 framework skills (identical to private)Tất cả 68 skill framework (giống hệt private)
- 7 framework-domain agents7 agent domain-framework
- All hooks, schemas, platform_lib, rules, rubricsTất cả hook, schema, platform_lib, rule, rubric
- Synthetic test fixtures (no corpus)Fixture test tổng hợp (không corpus)
- CHANGELOG · README · LICENSE (AGPL-3.0)CHANGELOG · README · LICENSE (AGPL-3.0)
- CI workflows including
frameworks-pack-release.ymlWorkflow CI bao gồmframeworks-pack-release.yml
What the mirror never containsGương không bao giờ chứa
docs/profiles/— real-character profileshồ sơ nhân vật thậtdocs/materials/— evidence corpuscorpus bằng chứngdocs/graph/— knowledge graph datadữ liệu đồ thị tri thứcdocs/references/— clinical reference filesfile reference lâm sàng- Any
.env, API keys, credentialsBất kỳ.env, API key, credentials - Dev-engineer agents (planner, researcher, tester, …)Agent dev-engineer (planner, researcher, tester, …)
frameworks-v* tag onlykích hoạt CI: chỉ tag frameworks-v*