huddle60 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,46 @@
1
1
  {
2
2
  "name": "huddle60",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.1.1",
4
+ "description": "huddle60: a 60-second huddle between PO, DEV and AI on GitHub. Gemini planning, hash-locked requirements and PR gates (AI-DLC).",
5
+ "type": "module",
6
+ "engines": {
7
+ "node": ">=22"
8
+ },
9
+ "bin": {
10
+ "huddle60": "dist/cli.js"
11
+ },
12
+ "files": [
13
+ "dist",
14
+ "templates",
15
+ "ui"
16
+ ],
17
+ "scripts": {
18
+ "build": "node scripts/build.mjs",
19
+ "prepublishOnly": "npm run build",
20
+ "typecheck": "tsc --noEmit",
21
+ "test": "vitest run",
22
+ "test:watch": "vitest",
23
+ "format": "prettier --write .",
24
+ "format:check": "prettier --check .",
25
+ "check": "npm run typecheck && npm test && npm run format:check",
26
+ "huddle60": "node dist/cli.js"
27
+ },
28
+ "dependencies": {
29
+ "@google/genai": "^2.32.0",
30
+ "@octokit/auth-app": "^8.3.1",
31
+ "@octokit/plugin-retry": "^8.1.1",
32
+ "@octokit/rest": "^22.0.1",
33
+ "yaml": "^2.9.1",
34
+ "zod": "^4.6.7"
35
+ },
36
+ "devDependencies": {
37
+ "@types/node": "^22.20.5",
38
+ "esbuild": "^0.28.2",
39
+ "prettier": "^3.9.10",
40
+ "typescript": "^5.9.3",
41
+ "vitest": "^5.0.5"
42
+ },
43
+ "optionalDependencies": {
44
+ "@rolldown/binding-darwin-arm64": "^1.2.16"
45
+ }
6
46
  }
@@ -0,0 +1 @@
1
+ blank_issues_enabled: false
@@ -0,0 +1,35 @@
1
+ name: Epic
2
+ description: Chức năng lớn gồm nhiều Story.
3
+ title: "[Epic] "
4
+ labels: ["type:epic"]
5
+ body:
6
+ - type: textarea
7
+ id: goal
8
+ attributes:
9
+ label: Mục tiêu và người dùng
10
+ validations:
11
+ required: true
12
+ - type: textarea
13
+ id: scope
14
+ attributes:
15
+ label: Phạm vi
16
+ value: |
17
+ - Trong phạm vi:
18
+ - Ngoài phạm vi:
19
+ validations:
20
+ required: true
21
+ - type: textarea
22
+ id: criteria
23
+ attributes:
24
+ label: Tiêu chí nghiệm thu Epic
25
+ description: "Mỗi dòng một tiêu chí: - EC-01: ..."
26
+ validations:
27
+ required: true
28
+ - type: textarea
29
+ id: technical_refs
30
+ attributes:
31
+ label: Tham chiếu kỹ thuật
32
+ - type: textarea
33
+ id: risks
34
+ attributes:
35
+ label: Câu hỏi và rủi ro
@@ -0,0 +1,18 @@
1
+ name: huddle60 Request
2
+ description: Mô tả nhu cầu bằng một câu; AI đề xuất Epic/Story/Task để PO xác nhận.
3
+ title: "[Request] "
4
+ labels: ["huddle60:request"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ Chỉ PO được cấu hình trong `.github/huddle60/policy.yml` mới kích hoạt AI planner.
10
+ AI chỉ đề xuất; chưa có Issue nào được tạo cho đến khi PO xác nhận.
11
+ - type: textarea
12
+ id: request
13
+ attributes:
14
+ label: Yêu cầu
15
+ description: Mô tả kết quả mong muốn bằng ngôn ngữ tự nhiên.
16
+ placeholder: Xây dựng tính năng đăng nhập Google OAuth
17
+ validations:
18
+ required: true
@@ -0,0 +1,45 @@
1
+ name: Story
2
+ description: Một phần giá trị sử dụng có thể nghiệm thu.
3
+ title: "[Story] "
4
+ labels: ["type:story"]
5
+ body:
6
+ - type: textarea
7
+ id: goal
8
+ attributes:
9
+ label: Mục tiêu và người dùng
10
+ validations:
11
+ required: true
12
+ - type: textarea
13
+ id: scope
14
+ attributes:
15
+ label: Phạm vi
16
+ value: |
17
+ - Trong phạm vi:
18
+ - Ngoài phạm vi:
19
+ validations:
20
+ required: true
21
+ - type: input
22
+ id: parent
23
+ attributes:
24
+ label: Issue cha
25
+ description: "Epic chứa Story này, ví dụ #10"
26
+ - type: input
27
+ id: blocked_by
28
+ attributes:
29
+ label: Blocked by
30
+ description: "Ví dụ #12, #13"
31
+ - type: textarea
32
+ id: acceptance_criteria
33
+ attributes:
34
+ label: Acceptance Criteria
35
+ description: "Mỗi dòng một AC: - AC-01: Given ... When ... Then ..."
36
+ validations:
37
+ required: true
38
+ - type: textarea
39
+ id: technical_refs
40
+ attributes:
41
+ label: Tham chiếu kỹ thuật
42
+ - type: textarea
43
+ id: risks
44
+ attributes:
45
+ label: Câu hỏi và rủi ro
@@ -0,0 +1,43 @@
1
+ name: Task
2
+ description: Bước kỹ thuật thuộc một Story.
3
+ title: "[Task] "
4
+ labels: ["type:task"]
5
+ body:
6
+ - type: textarea
7
+ id: goal
8
+ attributes:
9
+ label: Mục tiêu và người dùng
10
+ description: Đầu ra kỹ thuật của task.
11
+ validations:
12
+ required: true
13
+ - type: textarea
14
+ id: scope
15
+ attributes:
16
+ label: Phạm vi
17
+ description: File/module được phép thay đổi.
18
+ validations:
19
+ required: true
20
+ - type: input
21
+ id: parent
22
+ attributes:
23
+ label: Issue cha
24
+ description: "Story chứa task, ví dụ #11"
25
+ validations:
26
+ required: true
27
+ - type: input
28
+ id: blocked_by
29
+ attributes:
30
+ label: Blocked by
31
+ - type: input
32
+ id: ac_refs
33
+ attributes:
34
+ label: AC liên quan
35
+ description: "Ví dụ AC-01, AC-02"
36
+ - type: textarea
37
+ id: technical_refs
38
+ attributes:
39
+ label: Tham chiếu kỹ thuật
40
+ - type: textarea
41
+ id: risks
42
+ attributes:
43
+ label: Câu hỏi và rủi ro
@@ -0,0 +1,12 @@
1
+ Refs #
2
+
3
+ <!-- Dán khối từ reply của `/huddle60 ready` hoặc `npx huddle60 context --issue <n>`. -->
4
+ <!-- Dùng "Refs #n", không dùng Closes/Fixes/Resolves cho Story/Epic. -->
5
+
6
+ ## Đã thay đổi / AC liên quan
7
+
8
+ ## Đã kiểm tra (lệnh, kết quả)
9
+
10
+ ## Chưa kiểm tra / giới hạn / giả định
11
+
12
+ ## Cần ai quyết định gì
@@ -0,0 +1,38 @@
1
+ # huddle60 policy (AI-DLC protocol). Changes must be reviewed by CODEOWNERS.
2
+ # Roles use numeric GitHub user ids (https://api.github.com/users/<login>), which never change.
3
+ # Accounts used only as AI tools must not hold a role.
4
+ version: 1
5
+ roles:
6
+ po:
7
+ - id: 1000001
8
+ login: replace-with-po-login
9
+ dev:
10
+ - id: 1000002
11
+ login: replace-with-dev-1
12
+ - id: 1000003
13
+ login: replace-with-dev-2
14
+ maintainer: []
15
+ # Organization or user Project (v2) that receives Issues created by the planner. Remove to skip.
16
+ project:
17
+ owner: your-org
18
+ number: 1
19
+ lanes:
20
+ fast:
21
+ requires_po_approval: false
22
+ standard:
23
+ requires_po_approval: true
24
+ strict:
25
+ requires_po_approval: true
26
+ # Pull requests in the fast lane may not touch these paths.
27
+ sensitive_paths:
28
+ - ".github/**"
29
+ - "migrations/**"
30
+ - "src/auth/**"
31
+ evidence:
32
+ branch: huddle60-evidence
33
+ acceptance:
34
+ build_workflows:
35
+ - .github/workflows/build.yml
36
+ planner:
37
+ max_nodes: 60
38
+ plan_ttl_days: 30
@@ -0,0 +1,26 @@
1
+ # Deterministic huddle60 gates (AI-DLC protocol). Planning (Gemini) runs in `huddle60 ui` on the PO's machine
2
+ # (or the optional planner service), never here.
3
+ name: huddle60
4
+ on:
5
+ issue_comment:
6
+ types: [created, edited, deleted]
7
+ pull_request_target:
8
+ types: [opened, edited, synchronize, reopened, ready_for_review]
9
+ permissions: {}
10
+ jobs:
11
+ huddle60:
12
+ # Never check out or run pull request code in this job: it holds a write token.
13
+ if: github.event_name == 'pull_request_target' || (github.event.issue.pull_request == null && github.event.sender.type != 'Bot' && (startsWith(github.event.comment.body, '/huddle60') || startsWith(github.event.comment.body, '/ai-dlc') || github.event.action != 'created'))
14
+ runs-on: ubuntu-latest
15
+ permissions:
16
+ contents: read
17
+ steps:
18
+ - id: app-token
19
+ uses: actions/create-github-app-token@v1
20
+ with:
21
+ app-id: ${{ vars.AI_DLC_APP_ID }}
22
+ private-key: ${{ secrets.AI_DLC_APP_PRIVATE_KEY }}
23
+ - uses: tadev999/huddle60@main
24
+ with:
25
+ token: ${{ steps.app-token.outputs.token }}
26
+ enabled: ${{ vars.AI_DLC_ENABLED || 'true' }}
@@ -0,0 +1,12 @@
1
+ # Hướng dẫn cho AI agent
2
+
3
+ 1. Trước khi code, lấy baseline đã chốt:
4
+ `npx huddle60 context --issue <số>` (hoặc DEV dán nội dung từ nút **context** trong `huddle60 ui`).
5
+ Chỉ làm theo nội dung trong đầu ra. Nếu lệnh báo chưa ready hoặc có cảnh báo WARNING, dừng lại và hỏi DEV.
6
+ 2. Chỉ sửa file trong phạm vi Task. Không sửa `.github/`, `AGENTS.md` hoặc policy trừ khi Task yêu cầu rõ.
7
+ 3. Gắn mã AC vào tên test, ví dụ `[AC-01] từ chối mật khẩu sai`.
8
+ 4. Mô tả PR phải chứa khối `<!-- huddle60:begin -->` do lệnh trên sinh ra. Dùng `Refs #<số>`,
9
+ không dùng `Closes`, `Fixes`, `Resolves`.
10
+ 5. Ghi rõ phần chưa kiểm tra và giả định. Không viết rằng CI đã pass khi chưa có kết quả CI.
11
+ 6. Không chạy `/huddle60 approve`, `ready`, `accept`, `create-plan` và không bấm các nút tương ứng trong `huddle60 ui`;
12
+ đó là quyết định của con người.