@infinitedusky/indusk-mcp 1.9.0 → 1.9.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 +1 -1
- package/skills/jj.md +115 -0
- package/skills/work.md +8 -3
package/package.json
CHANGED
package/skills/jj.md
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jj
|
|
3
|
+
description: Jujutsu (jj) version control — describe-then-do workflow, splitting, and commit hygiene for monorepo development
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Jujutsu (jj)
|
|
7
|
+
|
|
8
|
+
This project uses [Jujutsu](https://github.com/jj-vcs/jj) for version control, not raw git. All VCS operations go through `jj`.
|
|
9
|
+
|
|
10
|
+
## Core Concept: Describe-Then-Do
|
|
11
|
+
|
|
12
|
+
Jujutsu has no staging area. Everything in the working copy is automatically part of the current change. This enables a **describe-then-do** workflow:
|
|
13
|
+
|
|
14
|
+
1. **Describe your intent** — `jj describe "what I'm about to do"`
|
|
15
|
+
2. **Do the work** — edit files, run commands, build the thing
|
|
16
|
+
3. **Start the next change** — `jj new` creates a fresh empty change on top
|
|
17
|
+
4. **Repeat** — describe → work → new → describe → work → new
|
|
18
|
+
|
|
19
|
+
This produces a clean history where every commit has a meaningful description written *before* the code, not after.
|
|
20
|
+
|
|
21
|
+
## During /work
|
|
22
|
+
|
|
23
|
+
When executing an implementation plan, integrate jj into the per-item workflow:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
For each checklist item (or logical group of items):
|
|
27
|
+
1. jj new # fresh change
|
|
28
|
+
2. jj describe "Phase 2: add Redis connection pool" # declare intent
|
|
29
|
+
3. [do the implementation work]
|
|
30
|
+
4. [check off the item(s) in impl.md]
|
|
31
|
+
5. → repeat from step 1 for the next item
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Granularity:** One `jj new` per logical unit of work. This is usually one checklist item, but closely related items (e.g., "add type" + "add factory for that type") can share a change. The gate items (otel, verify, context, document) within a phase can be one change each or grouped — use judgment.
|
|
35
|
+
|
|
36
|
+
**Phase transitions** are natural commit boundaries. Always `jj new` when starting a new phase.
|
|
37
|
+
|
|
38
|
+
## Monorepo Commit Siloing
|
|
39
|
+
|
|
40
|
+
This is a monorepo. Commits should be siloed between different contexts (what would be separate repos). When a phase touches multiple apps:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# After doing work that spans indusk-mcp + root config:
|
|
44
|
+
jj split 'glob:"apps/indusk-mcp/**"' # first commit: indusk-mcp changes
|
|
45
|
+
jj describe @- "indusk-mcp: add Redis pool" # describe the split-off commit
|
|
46
|
+
jj describe "Root: sync Redis config" # describe the remainder
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Use `jj split <filesets>` to separate changes by context. The matching files go into the first (parent) commit; the rest stays in the current (child) commit.
|
|
50
|
+
|
|
51
|
+
## Essential Commands
|
|
52
|
+
|
|
53
|
+
### Daily workflow
|
|
54
|
+
```bash
|
|
55
|
+
jj status # what's changed in the working copy
|
|
56
|
+
jj log # view recent history (graph format)
|
|
57
|
+
jj diff # see working copy changes
|
|
58
|
+
jj describe "message" # set/update description of current change
|
|
59
|
+
jj new # create new empty change on top of current
|
|
60
|
+
jj new -m "message" # create + describe in one step
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Splitting and reorganizing
|
|
64
|
+
```bash
|
|
65
|
+
jj split 'glob:"apps/foo/**"' # split by file pattern
|
|
66
|
+
jj split file1.ts file2.ts # split by specific files
|
|
67
|
+
jj squash # fold current change into parent
|
|
68
|
+
jj squash --from <rev> # fold a specific change into its parent
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Navigating history
|
|
72
|
+
```bash
|
|
73
|
+
jj log --limit 10 # recent commits
|
|
74
|
+
jj show <rev> # show a specific change
|
|
75
|
+
jj describe <rev> -m "new message" # update any change's description
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Bookmarks (jj's equivalent of branches)
|
|
79
|
+
```bash
|
|
80
|
+
jj bookmark create <name> # create bookmark at current change
|
|
81
|
+
jj bookmark set <name> # move bookmark to current change
|
|
82
|
+
jj bookmark list # list all bookmarks
|
|
83
|
+
jj git push --bookmark <name> # push a bookmark to remote
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Working with remote
|
|
87
|
+
```bash
|
|
88
|
+
jj git fetch # fetch from remote
|
|
89
|
+
jj git push # push current bookmark
|
|
90
|
+
jj rebase -d main # rebase onto main
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Important: jj, Not git
|
|
94
|
+
|
|
95
|
+
- **Never use raw `git` commands** — jj manages the git repo underneath. Running `git commit`, `git add`, etc. will conflict with jj's state.
|
|
96
|
+
- **No staging area** — there's no `git add`. All working copy changes are part of the current change.
|
|
97
|
+
- **Changes are mutable** — you can always `jj describe` to update a message, `jj squash` to combine, or `jj split` to separate. History rewriting is the normal workflow, not a special operation.
|
|
98
|
+
- **`@` means current change** — in commands, `@` refers to the working copy change. `@-` is the parent.
|
|
99
|
+
- **Editor issues** — in non-interactive environments (like Claude Code), use inline messages (`-m`) or `EDITOR="true"` to skip the editor for split operations.
|
|
100
|
+
|
|
101
|
+
## Description Style
|
|
102
|
+
|
|
103
|
+
Follow the monorepo commit message conventions:
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
{context}: {what changed}, {why if not obvious}
|
|
107
|
+
|
|
108
|
+
{optional body with details}
|
|
109
|
+
|
|
110
|
+
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Context prefixes: the app or area name (`indusk-mcp:`, `indusk-docs:`, `Root:`, `Infrastructure:`, etc.)
|
|
114
|
+
|
|
115
|
+
Keep the first line under 72 characters. Use the body for details when the change is complex.
|
package/skills/work.md
CHANGED
|
@@ -202,11 +202,16 @@ When you are corrected mid-work — the user says "no, not that way" or "don't d
|
|
|
202
202
|
|
|
203
203
|
Don't wait to be told. Corrections are the most valuable source of project knowledge.
|
|
204
204
|
|
|
205
|
-
## Commits
|
|
205
|
+
## Commits (jj)
|
|
206
206
|
|
|
207
|
-
|
|
207
|
+
Use the **describe-then-do** workflow from the jj skill:
|
|
208
208
|
|
|
209
|
-
|
|
209
|
+
1. `jj new` before each logical unit of work
|
|
210
|
+
2. `jj describe` to declare what you're about to do
|
|
211
|
+
3. Do the work, check off the item(s)
|
|
212
|
+
4. Repeat
|
|
213
|
+
|
|
214
|
+
Commit at natural boundaries — typically per checklist item or per phase gate (otel, verify, context, document). Follow the monorepo rule: if a change spans multiple apps, use `jj split` to silo commits between contexts. See the jj skill for details.
|
|
210
215
|
|
|
211
216
|
## Cross-Plan Impact
|
|
212
217
|
|