glori-builder 1.0.0 → 1.0.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/.claude/CLAUDE.md +11 -0
- package/.claude/agents/architect.md +2 -0
- package/.claude/agents/git-workflow.md +34 -4
- package/.claude/commands/auto-pilot.md +2 -1
- package/.claude/commands/issue-prd.md +39 -9
- package/.claude/commands/quetrex-update.md +8 -8
- package/.claude/hooks/check-quetrex-update.sh +4 -4
- package/package.json +1 -1
package/.claude/CLAUDE.md
CHANGED
|
@@ -47,6 +47,17 @@ Skip this if:
|
|
|
47
47
|
- PRs require human approval before merge
|
|
48
48
|
- Max 3 QA failures on an issue before escalating to the user — do not loop forever
|
|
49
49
|
|
|
50
|
+
## Pipeline Mode — No Stops
|
|
51
|
+
|
|
52
|
+
Once `/issue-prd` starts the pipeline, run every stage to completion without asking for confirmation, plan review, or approval at any intermediate point. Never ask "does this look right?", "should I proceed?", or "want to review before continuing?"
|
|
53
|
+
|
|
54
|
+
The only valid reasons to pause:
|
|
55
|
+
- A question only the user can answer (no assumption is reasonable)
|
|
56
|
+
- QA fails 3 times
|
|
57
|
+
- Reviewer flags a Critical security issue
|
|
58
|
+
|
|
59
|
+
The user should be able to `/issue-prd QUE-123` and immediately start another issue in a parallel session.
|
|
60
|
+
|
|
50
61
|
## Stack and Verification
|
|
51
62
|
|
|
52
63
|
Stack and verification commands live in the **project** `.claude/CLAUDE.md`.
|
|
@@ -67,3 +67,5 @@ When appending to `.claude/decisions.md`:
|
|
|
67
67
|
## Output Contract
|
|
68
68
|
|
|
69
69
|
`.issue/architecture-decision.md` committed before reporting complete. Memory and decisions updated if anything new was learned.
|
|
70
|
+
|
|
71
|
+
**Do not ask the orchestrator to review the plan.** Produce it, commit it, report complete. The pipeline continues immediately.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: git-workflow
|
|
3
|
-
description: Git operations specialist. Commits, pushes,
|
|
3
|
+
description: Git operations specialist. Commits, pushes, creates PRs, and updates Linear status to PR Ready. Never operates without explicit QA pass AND reviewer approval. Use as the final step in the issue pipeline.
|
|
4
4
|
tools: Bash, Read
|
|
5
5
|
model: haiku
|
|
6
6
|
permissionMode: acceptEdits
|
|
@@ -23,9 +23,39 @@ If either is missing, stop and report to the orchestrator.
|
|
|
23
23
|
1. Stage all changes on the issue branch: `git add -A`
|
|
24
24
|
2. Commit using conventional format (see below)
|
|
25
25
|
3. Push the issue branch: `git push -u origin <branch>`
|
|
26
|
-
4. Create a squash-merge PR to main: `gh pr create --title "..." --body "..."
|
|
27
|
-
5. Update Linear issue status
|
|
28
|
-
6.
|
|
26
|
+
4. Create a squash-merge PR to main: `gh pr create --title "..." --body "..."`
|
|
27
|
+
5. Update Linear issue status to the "In Review" or "PR Ready" state (whichever exists for this team)
|
|
28
|
+
6. Add a Linear comment with the PR URL
|
|
29
|
+
7. Report the PR URL to the orchestrator
|
|
30
|
+
|
|
31
|
+
## Update Linear Status
|
|
32
|
+
|
|
33
|
+
After the PR is created, find and set the appropriate state. Query the team's states to find one named "PR Ready", "In Review", or similar (type: `inReview`):
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
curl -s -X POST https://api.linear.app/graphql \
|
|
37
|
+
-H "Authorization: $LINEAR_API_KEY" \
|
|
38
|
+
-H "Content-Type: application/json" \
|
|
39
|
+
-d '{"query": "{ team(id: \"TEAM_UUID\") { states { nodes { id name type } } } }"}'
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Find the state with type `inReview`. Update the issue:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
curl -s -X POST https://api.linear.app/graphql \
|
|
46
|
+
-H "Authorization: $LINEAR_API_KEY" \
|
|
47
|
+
-H "Content-Type: application/json" \
|
|
48
|
+
-d '{"query": "mutation { issueUpdate(id: \"ISSUE_UUID\", input: { stateId: \"IN_REVIEW_STATE_ID\" }) { success } }"}'
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Add a comment with the PR link:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
curl -s -X POST https://api.linear.app/graphql \
|
|
55
|
+
-H "Authorization: $LINEAR_API_KEY" \
|
|
56
|
+
-H "Content-Type: application/json" \
|
|
57
|
+
-d '{"query": "mutation { commentCreate(input: { issueId: \"ISSUE_UUID\", body: \"PR ready for review: {PR_URL}\" }) { success } }"}'
|
|
58
|
+
```
|
|
29
59
|
|
|
30
60
|
## Commit Format
|
|
31
61
|
|
|
@@ -167,7 +167,8 @@ If CI fails after 2 minutes: treat as QA failure, increment retry counter.
|
|
|
167
167
|
### Step 2f: Update status
|
|
168
168
|
|
|
169
169
|
On **success**:
|
|
170
|
-
-
|
|
170
|
+
- Find the completed state: query `team.states` and find the state with `type: "completed"` — this is whatever your workspace calls it ("Complete", "Done", etc.)
|
|
171
|
+
- Update Linear issue to that state
|
|
171
172
|
- Update state file: `"status": "complete", "pr": PR_NUMBER`
|
|
172
173
|
- Add Linear comment: "Completed by Glori Builder auto-pilot."
|
|
173
174
|
|
|
@@ -50,7 +50,7 @@ Display clearly:
|
|
|
50
50
|
- **Description**:
|
|
51
51
|
{description}
|
|
52
52
|
|
|
53
|
-
If the issue state is
|
|
53
|
+
If the issue state type is `started` or `completed` (i.e. already in progress or finished), warn the user: "This issue is already {state.name}. Stopping to avoid duplicate work." Then stop.
|
|
54
54
|
|
|
55
55
|
### Step 2: Evaluate and Clarify
|
|
56
56
|
|
|
@@ -80,9 +80,27 @@ git branch --show-current
|
|
|
80
80
|
|
|
81
81
|
Confirm you are on the feature branch before continuing.
|
|
82
82
|
|
|
83
|
-
### Step 4:
|
|
83
|
+
### Step 4: Set Linear Status to In Progress
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
First, get the "In Progress" state ID for this team:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
curl -s -X POST https://api.linear.app/graphql \
|
|
89
|
+
-H "Authorization: $LINEAR_API_KEY" \
|
|
90
|
+
-H "Content-Type: application/json" \
|
|
91
|
+
-d '{"query": "{ team(id: \"TEAM_UUID\") { states { nodes { id name type } } } }"}'
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Find the state with `type: "started"` (this is the In Progress state). Then update the issue:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
curl -s -X POST https://api.linear.app/graphql \
|
|
98
|
+
-H "Authorization: $LINEAR_API_KEY" \
|
|
99
|
+
-H "Content-Type: application/json" \
|
|
100
|
+
-d '{"query": "mutation { issueUpdate(id: \"ISSUE_UUID\", input: { stateId: \"IN_PROGRESS_STATE_ID\" }) { success issue { state { name } } } }"}'
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Then add a comment:
|
|
86
104
|
|
|
87
105
|
```bash
|
|
88
106
|
curl -s -X POST https://api.linear.app/graphql \
|
|
@@ -91,18 +109,30 @@ curl -s -X POST https://api.linear.app/graphql \
|
|
|
91
109
|
-d '{"query": "mutation { commentCreate(input: { issueId: \"ISSUE_UUID\", body: \"Pipeline started — architect building implementation plan.\" }) { success } }"}'
|
|
92
110
|
```
|
|
93
111
|
|
|
94
|
-
Replace `ISSUE_UUID` with the
|
|
112
|
+
Replace `TEAM_UUID`, `ISSUE_UUID`, and `IN_PROGRESS_STATE_ID` with the values from Steps 1a and 1b.
|
|
113
|
+
|
|
114
|
+
### Step 5: Hand Off and Run to Completion
|
|
95
115
|
|
|
96
|
-
|
|
116
|
+
**PIPELINE MODE: do not stop between stages.** Once this step begins, run the full pipeline without asking for confirmation, review, or approval at any intermediate point. The only valid reasons to stop are:
|
|
117
|
+
- A genuine question only the user can answer (no assumptions possible)
|
|
118
|
+
- QA failing 3 times in a row
|
|
119
|
+
- Reviewer flagging a Critical security issue
|
|
97
120
|
|
|
98
|
-
Tell the orchestrator:
|
|
121
|
+
Tell the orchestrator the pipeline is starting, then immediately invoke each agent in sequence:
|
|
99
122
|
|
|
100
|
-
|
|
123
|
+
1. **Architect** — implementation plan, file ownership map, acceptance criteria
|
|
124
|
+
2. **Designer** (if architect flagged `designer_required: true`) — design spec
|
|
125
|
+
3. **Developer(s)** — parallel implementation in separate worktrees
|
|
126
|
+
4. **Merge sub-branches** into feature branch
|
|
127
|
+
5. **QA** — prove green with exit codes (up to 3 retries, fix and rerun on failure)
|
|
128
|
+
6. **Reviewer** — semantic review of full diff (fix and re-QA on rejection)
|
|
129
|
+
7. **git-workflow** — commit, push, squash PR to main
|
|
101
130
|
|
|
102
|
-
|
|
131
|
+
Report when PR is created. That is the end of this issue's pipeline.
|
|
103
132
|
|
|
104
133
|
## Notes
|
|
105
134
|
- LINEAR_API_KEY must be set as an environment variable
|
|
106
135
|
- The architect creates the implementation PRD — this skill does not
|
|
107
|
-
- If the issue
|
|
136
|
+
- If the issue state type is `started` or `completed`, warn the user and stop — check type not name so it works for any workspace ("Complete", "Done", etc.)
|
|
137
|
+
- Never stop mid-pipeline to ask "does this look right?" — produce output and continue
|
|
108
138
|
- Never set the issue to "Queued" — that was the old runner pattern
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Check for and apply updates to
|
|
2
|
+
description: Check for and apply updates to Glori Builder. Shows current vs latest version and updates if behind.
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
# Quetrex Update
|
|
@@ -7,30 +7,30 @@ description: Check for and apply updates to quetrex-base. Shows current vs lates
|
|
|
7
7
|
## Step 1: Check Installed Version
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
npm list -g
|
|
10
|
+
npm list -g glori-builder --depth=0 --json 2>/dev/null
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
Extract the installed version from the JSON output.
|
|
14
14
|
|
|
15
|
-
If
|
|
15
|
+
If `glori-builder` is not found in the output, tell the user: "Glori Builder does not appear to be installed globally. Install it with: `npm install -g glori-builder`" and stop.
|
|
16
16
|
|
|
17
17
|
## Step 2: Check Latest Version
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
npm show
|
|
20
|
+
npm show glori-builder version 2>/dev/null
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
## Step 3: Compare
|
|
24
24
|
|
|
25
25
|
If installed == latest:
|
|
26
|
-
> "You're on the latest version of
|
|
26
|
+
> "You're on the latest version of Glori Builder (v{version}). Nothing to do."
|
|
27
27
|
|
|
28
28
|
Clear the flag file if it exists: `rm -f ~/.claude/.quetrex-update-available`
|
|
29
29
|
|
|
30
30
|
Stop.
|
|
31
31
|
|
|
32
32
|
If installed != latest, display:
|
|
33
|
-
> "
|
|
33
|
+
> "Glori Builder update available
|
|
34
34
|
> Installed: v{installed}
|
|
35
35
|
> Latest: v{latest}
|
|
36
36
|
>
|
|
@@ -43,7 +43,7 @@ Wait for confirmation before proceeding.
|
|
|
43
43
|
## Step 4: Apply Update
|
|
44
44
|
|
|
45
45
|
```bash
|
|
46
|
-
npm install -g @
|
|
46
|
+
npm install -g glori-builder@latest
|
|
47
47
|
```
|
|
48
48
|
|
|
49
49
|
The postinstall script runs automatically and copies all updated files to `~/.claude/`.
|
|
@@ -52,7 +52,7 @@ The postinstall script runs automatically and copies all updated files to `~/.cl
|
|
|
52
52
|
|
|
53
53
|
```bash
|
|
54
54
|
rm -f ~/.claude/.quetrex-update-available
|
|
55
|
-
npm list -g
|
|
55
|
+
npm list -g glori-builder --depth=0
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
Report:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
# Daily background check for
|
|
2
|
+
# Daily background check for Glori Builder updates.
|
|
3
3
|
# Runs on session Stop. Fast exit if checked within 24 hours.
|
|
4
4
|
|
|
5
5
|
TIMESTAMP_FILE="$HOME/.claude/.quetrex-last-check"
|
|
@@ -19,10 +19,10 @@ date +%s > "$TIMESTAMP_FILE"
|
|
|
19
19
|
|
|
20
20
|
# Run the npm check in the background so it doesn't delay session exit
|
|
21
21
|
(
|
|
22
|
-
INSTALLED=$(npm list -g
|
|
23
|
-
| python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('dependencies',{}).get('
|
|
22
|
+
INSTALLED=$(npm list -g glori-builder --depth=0 --json 2>/dev/null \
|
|
23
|
+
| python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('dependencies',{}).get('glori-builder',{}).get('version',''))" 2>/dev/null)
|
|
24
24
|
|
|
25
|
-
LATEST=$(npm show
|
|
25
|
+
LATEST=$(npm show glori-builder version 2>/dev/null)
|
|
26
26
|
|
|
27
27
|
if [ -n "$INSTALLED" ] && [ -n "$LATEST" ] && [ "$INSTALLED" != "$LATEST" ]; then
|
|
28
28
|
echo "$LATEST" > "$FLAG_FILE"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "glori-builder",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "Glori Builder — Claude Code base configuration for development teams. Agents, skills, and commands for a complete AI-powered development pipeline.",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"postinstall": "node install.js"
|