@flydocs/cli 0.6.0-alpha.13 → 0.6.0-alpha.20
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/dist/cli.js +281 -256
- package/package.json +1 -1
- package/template/.claude/CLAUDE.md +62 -66
- package/template/.claude/agents/implementation-agent.md +1 -1
- package/template/.claude/agents/pm-agent.md +1 -1
- package/template/.claude/commands/activate.md +1 -1
- package/template/.claude/commands/attach.md +1 -1
- package/template/.claude/commands/block.md +2 -2
- package/template/.claude/commands/capture.md +1 -1
- package/template/.claude/commands/close.md +1 -1
- package/template/.claude/commands/flydocs-setup.md +261 -58
- package/template/.claude/commands/flydocs-upgrade.md +26 -27
- package/template/.claude/commands/implement.md +1 -1
- package/template/.claude/commands/new-project.md +1 -1
- package/template/.claude/commands/onboard.md +275 -0
- package/template/.claude/commands/project-update.md +1 -1
- package/template/.claude/commands/refine.md +1 -1
- package/template/.claude/commands/review.md +1 -1
- package/template/.claude/commands/start-session.md +1 -1
- package/template/.claude/commands/status.md +1 -1
- package/template/.claude/commands/validate.md +1 -1
- package/template/.claude/commands/wrap-session.md +1 -1
- package/template/.claude/hooks/auto-approve.py +132 -0
- package/template/.claude/hooks/post-pr-check.py +108 -0
- package/template/.claude/hooks/post-transition-check.py +94 -0
- package/template/{.flydocs → .claude}/hooks/prompt-submit.py +167 -17
- package/template/.claude/hooks/session-start.py +146 -0
- package/template/.claude/hooks/stop-gate.py +109 -0
- package/template/.claude/settings.json +41 -4
- package/template/.claude/skills/README.md +23 -25
- package/template/.claude/skills/flydocs-workflow/SKILL.md +121 -34
- package/template/.claude/skills/flydocs-workflow/cursor-rule.mdc +9 -8
- package/template/.claude/skills/flydocs-workflow/reference/golden-rules.md +28 -17
- package/template/.claude/skills/flydocs-workflow/reference/graph-schema.md +116 -0
- package/template/.claude/skills/flydocs-workflow/reference/pr-workflow.md +30 -15
- package/template/.claude/skills/flydocs-workflow/reference/priority-estimates.md +1 -1
- package/template/.claude/skills/flydocs-workflow/reference/service-descriptor-schema.md +251 -0
- package/template/.claude/skills/flydocs-workflow/reference/status-workflow.md +26 -26
- package/template/.claude/skills/flydocs-workflow/scripts/_local/__init__.py +0 -0
- package/template/.claude/skills/{flydocs-local/scripts/flydocs_api.py → flydocs-workflow/scripts/_local/file_store.py} +133 -46
- package/template/.claude/skills/flydocs-workflow/scripts/flydocs_api.py +693 -0
- package/template/{.flydocs → .claude/skills/flydocs-workflow}/scripts/generate_manifest.py +4 -4
- package/template/.claude/skills/{flydocs-context-graph → flydocs-workflow}/scripts/graph_build.py +132 -1
- package/template/.claude/skills/{flydocs-context-graph → flydocs-workflow}/scripts/graph_query.py +18 -5
- package/template/.claude/skills/{flydocs-context-graph → flydocs-workflow}/scripts/graph_session.py +1 -1
- package/template/.claude/skills/{flydocs-context-graph → flydocs-workflow}/scripts/graph_update.py +4 -4
- package/template/.claude/skills/{flydocs-context-graph → flydocs-workflow}/scripts/graph_utils.py +2 -1
- package/template/.claude/skills/flydocs-workflow/scripts/issues.py +489 -0
- package/template/.claude/skills/flydocs-workflow/scripts/projects.py +144 -0
- package/template/.claude/skills/flydocs-workflow/scripts/pull_services.py +128 -0
- package/template/.claude/skills/flydocs-workflow/scripts/push_service.py +132 -0
- package/template/.claude/skills/flydocs-workflow/scripts/session.py +54 -0
- package/template/.claude/skills/flydocs-workflow/scripts/workspace.py +860 -0
- package/template/.claude/skills/flydocs-workflow/session.md +16 -11
- package/template/.claude/skills/flydocs-workflow/stages/activate.md +13 -8
- package/template/.claude/skills/flydocs-workflow/stages/capture.md +4 -4
- package/template/.claude/skills/flydocs-workflow/stages/close.md +1 -1
- package/template/.claude/skills/flydocs-workflow/stages/implement.md +7 -7
- package/template/.claude/skills/flydocs-workflow/stages/refine.md +5 -5
- package/template/.claude/skills/flydocs-workflow/stages/review.md +2 -2
- package/template/.claude/skills/flydocs-workflow/stages/validate.md +3 -1
- package/template/.claude/skills/flydocs-workflow/templates/pr/default.md +33 -0
- package/template/.cursor/agents/implementation-agent.md +1 -1
- package/template/.cursor/agents/pm-agent.md +2 -2
- package/template/.cursor/hooks.json +10 -3
- package/template/.env.example +6 -6
- package/template/.flydocs/config.json +2 -1
- package/template/.flydocs/templates/README.md +13 -14
- package/template/.flydocs/templates/quick-capture.md +4 -8
- package/template/.flydocs/version +1 -1
- package/template/AGENTS.md +39 -32
- package/template/flydocs/README.md +1 -3
- package/template/flydocs/context/project.md +6 -3
- package/template/flydocs/design-system/README.md +3 -3
- package/template/manifest.json +17 -19
- package/template/.claude/skills/flydocs-cloud/SKILL.md +0 -138
- package/template/.claude/skills/flydocs-cloud/cursor-rule.mdc +0 -50
- package/template/.claude/skills/flydocs-cloud/scripts/assign.py +0 -28
- package/template/.claude/skills/flydocs-cloud/scripts/assign_cycle.py +0 -28
- package/template/.claude/skills/flydocs-cloud/scripts/assign_milestone.py +0 -22
- package/template/.claude/skills/flydocs-cloud/scripts/comment.py +0 -29
- package/template/.claude/skills/flydocs-cloud/scripts/create_issue.py +0 -83
- package/template/.claude/skills/flydocs-cloud/scripts/create_milestone.py +0 -35
- package/template/.claude/skills/flydocs-cloud/scripts/create_project.py +0 -33
- package/template/.claude/skills/flydocs-cloud/scripts/create_team.py +0 -39
- package/template/.claude/skills/flydocs-cloud/scripts/delete_milestone.py +0 -21
- package/template/.claude/skills/flydocs-cloud/scripts/estimate.py +0 -33
- package/template/.claude/skills/flydocs-cloud/scripts/flydocs_api.py +0 -241
- package/template/.claude/skills/flydocs-cloud/scripts/generate_config.py +0 -125
- package/template/.claude/skills/flydocs-cloud/scripts/get_estimate_scale.py +0 -23
- package/template/.claude/skills/flydocs-cloud/scripts/get_issue.py +0 -24
- package/template/.claude/skills/flydocs-cloud/scripts/get_me.py +0 -103
- package/template/.claude/skills/flydocs-cloud/scripts/link.py +0 -28
- package/template/.claude/skills/flydocs-cloud/scripts/list_cycles.py +0 -28
- package/template/.claude/skills/flydocs-cloud/scripts/list_issues.py +0 -44
- package/template/.claude/skills/flydocs-cloud/scripts/list_labels.py +0 -19
- package/template/.claude/skills/flydocs-cloud/scripts/list_milestones.py +0 -28
- package/template/.claude/skills/flydocs-cloud/scripts/list_projects.py +0 -31
- package/template/.claude/skills/flydocs-cloud/scripts/list_providers.py +0 -19
- package/template/.claude/skills/flydocs-cloud/scripts/list_statuses.py +0 -19
- package/template/.claude/skills/flydocs-cloud/scripts/list_teams.py +0 -19
- package/template/.claude/skills/flydocs-cloud/scripts/priority.py +0 -29
- package/template/.claude/skills/flydocs-cloud/scripts/project_update.py +0 -45
- package/template/.claude/skills/flydocs-cloud/scripts/refresh_labels.py +0 -87
- package/template/.claude/skills/flydocs-cloud/scripts/set_identity.py +0 -54
- package/template/.claude/skills/flydocs-cloud/scripts/set_labels.py +0 -54
- package/template/.claude/skills/flydocs-cloud/scripts/set_preferences.py +0 -49
- package/template/.claude/skills/flydocs-cloud/scripts/set_provider.py +0 -31
- package/template/.claude/skills/flydocs-cloud/scripts/set_status_mapping.py +0 -57
- package/template/.claude/skills/flydocs-cloud/scripts/set_team.py +0 -28
- package/template/.claude/skills/flydocs-cloud/scripts/transition.py +0 -26
- package/template/.claude/skills/flydocs-cloud/scripts/update_description.py +0 -36
- package/template/.claude/skills/flydocs-cloud/scripts/update_issue.py +0 -100
- package/template/.claude/skills/flydocs-cloud/scripts/update_milestone.py +0 -42
- package/template/.claude/skills/flydocs-cloud/scripts/validate_setup.py +0 -120
- package/template/.claude/skills/flydocs-context-graph/SKILL.md +0 -94
- package/template/.claude/skills/flydocs-context-graph/schema.md +0 -78
- package/template/.claude/skills/flydocs-context-graph/scripts/graph_context.py +0 -338
- package/template/.claude/skills/flydocs-context7/SKILL.md +0 -105
- package/template/.claude/skills/flydocs-context7/cursor-rule.mdc +0 -49
- package/template/.claude/skills/flydocs-context7/scripts/context7.py +0 -293
- package/template/.claude/skills/flydocs-estimates/SKILL.md +0 -384
- package/template/.claude/skills/flydocs-figma/SKILL.md +0 -377
- package/template/.claude/skills/flydocs-figma/references/PROMPTING.md +0 -108
- package/template/.claude/skills/flydocs-figma/references/TROUBLESHOOTING.md +0 -112
- package/template/.claude/skills/flydocs-local/SKILL.md +0 -103
- package/template/.claude/skills/flydocs-local/cursor-rule.mdc +0 -43
- package/template/.claude/skills/flydocs-local/scripts/assign.py +0 -29
- package/template/.claude/skills/flydocs-local/scripts/comment.py +0 -27
- package/template/.claude/skills/flydocs-local/scripts/create_issue.py +0 -44
- package/template/.claude/skills/flydocs-local/scripts/estimate.py +0 -37
- package/template/.claude/skills/flydocs-local/scripts/get_issue.py +0 -20
- package/template/.claude/skills/flydocs-local/scripts/link.py +0 -41
- package/template/.claude/skills/flydocs-local/scripts/list_issues.py +0 -50
- package/template/.claude/skills/flydocs-local/scripts/priority.py +0 -37
- package/template/.claude/skills/flydocs-local/scripts/project_update.py +0 -67
- package/template/.claude/skills/flydocs-local/scripts/status_summary.py +0 -16
- package/template/.claude/skills/flydocs-local/scripts/transition.py +0 -24
- package/template/.claude/skills/flydocs-local/scripts/update_description.py +0 -35
- package/template/.claude/skills/flydocs-local/scripts/update_issue.py +0 -84
- package/template/.flydocs/hooks/auto-approve.py +0 -71
- package/template/.flydocs/scripts/skill_manager.py +0 -541
- package/template/.flydocs/templates/bug.md +0 -166
- package/template/.flydocs/templates/chore.md +0 -110
- package/template/.flydocs/templates/feature.md +0 -173
- package/template/.flydocs/templates/idea.md +0 -122
- /package/template/{.flydocs → .claude}/hooks/post-edit.py +0 -0
- /package/template/.claude/skills/{flydocs-estimates/references → flydocs-workflow/reference}/provider-costs.md +0 -0
- /package/template/.claude/skills/flydocs-workflow/templates/{bug.md → issues/bug.md} +0 -0
- /package/template/.claude/skills/flydocs-workflow/templates/{chore.md → issues/chore.md} +0 -0
- /package/template/.claude/skills/flydocs-workflow/templates/{feature.md → issues/feature.md} +0 -0
- /package/template/.claude/skills/flydocs-workflow/templates/{idea.md → issues/idea.md} +0 -0
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
"hooks": {
|
|
3
3
|
"PreToolUse": [
|
|
4
4
|
{
|
|
5
|
-
"matcher": "Bash",
|
|
5
|
+
"matcher": "Bash|Edit|Write",
|
|
6
6
|
"hooks": [
|
|
7
7
|
{
|
|
8
8
|
"type": "command",
|
|
9
|
-
"command": "python3 \"$CLAUDE_PROJECT_DIR\"/.
|
|
9
|
+
"command": "python3 \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/auto-approve.py",
|
|
10
10
|
"timeout": 5
|
|
11
11
|
}
|
|
12
12
|
]
|
|
@@ -18,10 +18,25 @@
|
|
|
18
18
|
"hooks": [
|
|
19
19
|
{
|
|
20
20
|
"type": "command",
|
|
21
|
-
"command": "python3 \"$CLAUDE_PROJECT_DIR\"/.
|
|
21
|
+
"command": "python3 \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/post-edit.py",
|
|
22
22
|
"timeout": 30
|
|
23
23
|
}
|
|
24
24
|
]
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"matcher": "Bash",
|
|
28
|
+
"hooks": [
|
|
29
|
+
{
|
|
30
|
+
"type": "command",
|
|
31
|
+
"command": "python3 \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/post-pr-check.py",
|
|
32
|
+
"timeout": 10
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"type": "command",
|
|
36
|
+
"command": "python3 \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/post-transition-check.py",
|
|
37
|
+
"timeout": 5
|
|
38
|
+
}
|
|
39
|
+
]
|
|
25
40
|
}
|
|
26
41
|
],
|
|
27
42
|
"UserPromptSubmit": [
|
|
@@ -29,7 +44,29 @@
|
|
|
29
44
|
"hooks": [
|
|
30
45
|
{
|
|
31
46
|
"type": "command",
|
|
32
|
-
"command": "python3 \"$CLAUDE_PROJECT_DIR\"/.
|
|
47
|
+
"command": "python3 \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/prompt-submit.py",
|
|
48
|
+
"timeout": 10
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"Stop": [
|
|
54
|
+
{
|
|
55
|
+
"hooks": [
|
|
56
|
+
{
|
|
57
|
+
"type": "command",
|
|
58
|
+
"command": "python3 \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/stop-gate.py",
|
|
59
|
+
"timeout": 5
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
"SessionStart": [
|
|
65
|
+
{
|
|
66
|
+
"hooks": [
|
|
67
|
+
{
|
|
68
|
+
"type": "command",
|
|
69
|
+
"command": "python3 \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/session-start.py",
|
|
33
70
|
"timeout": 10
|
|
34
71
|
}
|
|
35
72
|
]
|
|
@@ -11,16 +11,12 @@
|
|
|
11
11
|
Owned and maintained by FlyDocs. May include executable scripts and premium
|
|
12
12
|
functionality gated via API relay.
|
|
13
13
|
|
|
14
|
-
| Skill
|
|
15
|
-
|
|
|
16
|
-
| `flydocs-workflow`
|
|
17
|
-
| `flydocs-local` | Mechanism (free) | File-based issue management |
|
|
18
|
-
| `flydocs-cloud` | Mechanism (paid) | Linear/provider issue management via API |
|
|
19
|
-
| `flydocs-context7` | Core | Library documentation lookup via Context7 API |
|
|
20
|
-
| `flydocs-figma` | Premium | Design extraction from Figma |
|
|
21
|
-
| `flydocs-estimates` | Premium | AI token/labor cost estimation |
|
|
14
|
+
| Skill | Purpose |
|
|
15
|
+
| ------------------ | ---------------------------------------------------------------------------- |
|
|
16
|
+
| `flydocs-workflow` | Unified skill — lifecycle, issues, projects, Figma, estimates, context graph |
|
|
22
17
|
|
|
23
|
-
|
|
18
|
+
All functionality consolidated into a single skill. Tier (local vs cloud) is
|
|
19
|
+
auto-detected from `.flydocs/config.json` — no separate mechanism skills.
|
|
24
20
|
|
|
25
21
|
### Unprefixed — Community Skills
|
|
26
22
|
|
|
@@ -101,8 +97,8 @@ The body serves as a **compressed index** — not a documentation dump. Target ~
|
|
|
101
97
|
```markdown
|
|
102
98
|
# Skill Name
|
|
103
99
|
|
|
104
|
-
|
|
105
|
-
|
|
100
|
+
Use this skill when performing [domain]-specific operations.
|
|
101
|
+
For general coding, skip this — just write code.
|
|
106
102
|
|
|
107
103
|
## Key Rules (always apply)
|
|
108
104
|
|
|
@@ -191,12 +187,13 @@ CLAUDE.md and AGENTS.md between markers:
|
|
|
191
187
|
|
|
192
188
|
## Skills Index
|
|
193
189
|
|
|
194
|
-
|
|
190
|
+
Consult the workflow skill for **issue operations and status transitions only**.
|
|
191
|
+
For general coding tasks, skip this — just write code.
|
|
195
192
|
|
|
196
|
-
| Skill | Triggers
|
|
197
|
-
| ----------------- |
|
|
198
|
-
| flydocs-workflow |
|
|
199
|
-
| typescript-strict | TypeScript, type error, any type
|
|
193
|
+
| Skill | Triggers | Entry |
|
|
194
|
+
| ----------------- | --------------------------------------------- | ----------------------------------------- |
|
|
195
|
+
| flydocs-workflow | create issue, transition, assign, close issue | .claude/skills/flydocs-workflow/SKILL.md |
|
|
196
|
+
| typescript-strict | TypeScript, type error, any type | .claude/skills/typescript-strict/SKILL.md |
|
|
200
197
|
|
|
201
198
|
<!-- flydocs:skills-manifest:end -->
|
|
202
199
|
```
|
|
@@ -257,17 +254,18 @@ For detailed patterns, see `reference/patterns.md`.
|
|
|
257
254
|
|
|
258
255
|
---
|
|
259
256
|
|
|
260
|
-
##
|
|
257
|
+
## Unified Dispatcher Model
|
|
261
258
|
|
|
262
|
-
|
|
263
|
-
|
|
259
|
+
All operations route through grouped dispatcher scripts in
|
|
260
|
+
`flydocs-workflow/scripts/`. The unified client (`flydocs_api.py`) auto-detects
|
|
261
|
+
tier from `.flydocs/config.json` — scripts never check tier directly.
|
|
264
262
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
`
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
263
|
+
| Dispatcher | Operations |
|
|
264
|
+
| -------------- | ------------------------------------------------------ |
|
|
265
|
+
| `issues.py` | create, get, list, transition, assign, update, comment |
|
|
266
|
+
| `projects.py` | list-projects, create-project, milestones, cycles |
|
|
267
|
+
| `workspace.py` | validate, labels, statuses, teams, config, identity |
|
|
268
|
+
| `session.py` | project-update, status-summary |
|
|
271
269
|
|
|
272
270
|
---
|
|
273
271
|
|
|
@@ -1,33 +1,38 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: flydocs-workflow
|
|
3
3
|
description: |
|
|
4
|
-
FlyDocs
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
Unified FlyDocs skill — lifecycle workflow, issue operations, project
|
|
5
|
+
management, knowledge graph, and session context. Tier-aware: auto-detects
|
|
6
|
+
cloud (relay API) or local (filesystem) from config.
|
|
7
7
|
triggers:
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
- review
|
|
13
|
-
- validate
|
|
14
|
-
- close
|
|
15
|
-
- session
|
|
16
|
-
- workflow
|
|
8
|
+
- create issue
|
|
9
|
+
- capture issue
|
|
10
|
+
- log a bug
|
|
11
|
+
- add to backlog
|
|
17
12
|
- transition
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
13
|
+
- move to
|
|
14
|
+
- mark as
|
|
15
|
+
- set status
|
|
16
|
+
- assign issue
|
|
17
|
+
- close issue
|
|
18
|
+
- start session
|
|
19
|
+
- wrap session
|
|
20
|
+
- project update
|
|
21
|
+
- status update
|
|
22
|
+
- add comment
|
|
23
|
+
- set priority
|
|
24
|
+
- set estimate
|
|
24
25
|
---
|
|
25
26
|
|
|
26
27
|
# FlyDocs Workflow
|
|
27
28
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
Unified skill for the FlyDocs development lifecycle, issue operations,
|
|
30
|
+
project management, knowledge graph, and session context.
|
|
31
|
+
|
|
32
|
+
When performing issue operations or status transitions, use the dispatcher
|
|
33
|
+
scripts below. Slash commands (`/capture`, `/implement`, etc.) load stage
|
|
34
|
+
files automatically — only read stage files manually when handling natural
|
|
35
|
+
language workflow requests that bypass slash commands.
|
|
31
36
|
|
|
32
37
|
## Lifecycle
|
|
33
38
|
|
|
@@ -57,19 +62,97 @@ Capture → Refine → Activate → Implement → Review → Validate → Close
|
|
|
57
62
|
| Wrap session | session.md |
|
|
58
63
|
| Stale detection | session.md |
|
|
59
64
|
|
|
65
|
+
## Script Catalog
|
|
66
|
+
|
|
67
|
+
All scripts: `python3 .claude/skills/flydocs-workflow/scripts/<script>`
|
|
68
|
+
|
|
69
|
+
### Issue Operations — `issues.py`
|
|
70
|
+
|
|
71
|
+
| Command | Usage | Notes |
|
|
72
|
+
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
|
|
73
|
+
| `create` | `--title T --type feature\|bug\|chore\|idea [--description D] [--priority 0-4] [--estimate 0\|1\|2\|3\|5] [--assignee A] [--project P] [--triage]` | Also accepts `--description-file` or stdin |
|
|
74
|
+
| `get` | `REF [--fields basic\|full]` | Full includes comments |
|
|
75
|
+
| `list` | `[--status S] [--active] [--project P] [--assignee A] [--milestone M] [--mine] [--limit N]` | `--active` = non-terminal states |
|
|
76
|
+
| `transition` | `REF STATUS COMMENT` | Status is uppercased automatically |
|
|
77
|
+
| `assign` | `REF ASSIGNEE` or `REF --unassign` | |
|
|
78
|
+
| `update` | `REF [--title] [--priority] [--estimate] [--assignee] [--state] [--description] [--labels] [--milestone] [--comment]` | Bulk update, also accepts `--description-file` |
|
|
79
|
+
| `description` | `REF [--text T] [--file F]` | Also accepts stdin |
|
|
80
|
+
| `comment` | `REF [BODY]` | Also accepts stdin |
|
|
81
|
+
| `estimate` | `REF POINTS` | Non-negative integer |
|
|
82
|
+
| `priority` | `REF LEVEL` | 0 (none) to 4 (low) |
|
|
83
|
+
| `link` | `REF RELATED_REF TYPE` | Type: blocks, related, duplicate |
|
|
84
|
+
| `assign-milestone` | `REF MILESTONE_ID` | Cloud only |
|
|
85
|
+
| `assign-cycle` | `REF [CYCLE_ID]` | Cloud only |
|
|
86
|
+
| `pr` | `[--issue REF] [--title T] [--base B] [--draft] [--dry-run]` | Detects GitHub/GitLab, auto-populates from issue |
|
|
87
|
+
|
|
88
|
+
### Project Operations — `projects.py` (cloud only)
|
|
89
|
+
|
|
90
|
+
| Command | Usage |
|
|
91
|
+
| ------------------ | --------------------------------------------- |
|
|
92
|
+
| `list-projects` | `[--active] [--all]` |
|
|
93
|
+
| `create-project` | `--name N [--description D]` |
|
|
94
|
+
| `list-milestones` | `[--all]` |
|
|
95
|
+
| `create-milestone` | `--name N [--project P] [--target-date D]` |
|
|
96
|
+
| `update-milestone` | `ID [--name] [--target-date] [--description]` |
|
|
97
|
+
| `delete-milestone` | `ID` |
|
|
98
|
+
| `list-cycles` | `[--active]` |
|
|
99
|
+
|
|
100
|
+
### Workspace Operations — `workspace.py` (cloud only)
|
|
101
|
+
|
|
102
|
+
| Command | Usage | Notes |
|
|
103
|
+
| -------------------- | ---------------------------------------------------- | ------------------------------------------- |
|
|
104
|
+
| `validate` | (no args) | Writes validation cache, sets setupComplete |
|
|
105
|
+
| `list-labels` | (no args) | |
|
|
106
|
+
| `refresh-labels` | `[--fix]` | Compare local config with provider |
|
|
107
|
+
| `list-statuses` | (no args) | |
|
|
108
|
+
| `list-providers` | (no args) | |
|
|
109
|
+
| `set-provider` | `TYPE` | linear, jira |
|
|
110
|
+
| `list-teams` | (no args) | |
|
|
111
|
+
| `create-team` | `--name N [--key K] [--description D] [--parent ID]` | |
|
|
112
|
+
| `set-team` | `TEAM_ID` | |
|
|
113
|
+
| `set-labels` | `[--defaults JSON] [--type-map JSON]` | Also accepts stdin |
|
|
114
|
+
| `set-status-mapping` | `[--auto] [--mapping JSON]` | Also accepts stdin |
|
|
115
|
+
| `set-identity` | `PROVIDER PROVIDER_USER_ID` | Writes .flydocs/me.json |
|
|
116
|
+
| `set-preferences` | `[--workspace] [--assignee] [--display JSON]` | No flags = GET |
|
|
117
|
+
| `get-estimate-scale` | (no args) | |
|
|
118
|
+
| `generate-config` | `[--dry-run]` | Merge server config with local |
|
|
119
|
+
| `get-me` | (no args) | Writes .flydocs/me.json |
|
|
120
|
+
|
|
121
|
+
### Session Operations — `session.py`
|
|
122
|
+
|
|
123
|
+
| Command | Usage | Notes |
|
|
124
|
+
| ---------------- | --------------------------------------------------------------- | ---------------------- |
|
|
125
|
+
| `project-update` | `--health onTrack\|atRisk\|offTrack [--body B] [--body-file F]` | Also accepts stdin |
|
|
126
|
+
| `status-summary` | (no args) | Issue counts by status |
|
|
127
|
+
|
|
128
|
+
### Knowledge Graph Scripts
|
|
129
|
+
|
|
130
|
+
| Script | Usage | Notes |
|
|
131
|
+
| ------------------ | --------------------------------------------------------------------------- | ---------------------------------------------------- |
|
|
132
|
+
| `graph_build.py` | `[--root PATH]` | Rebuild graph from skills, ADRs, service descriptors |
|
|
133
|
+
| `graph_query.py` | `--node ID [--depth N] [--rel TYPE] [--reverse] [--format json\|md]` | BFS traversal |
|
|
134
|
+
| `graph_update.py` | `add-node ID --type TYPE [--label STR]` / `add-edge FROM TO REL [--manual]` | Manual CRUD |
|
|
135
|
+
| `graph_session.py` | `--summary "..." [--issue REF]... [--decision NNN]...` | Called at session wrap |
|
|
136
|
+
| `push_service.py` | `[--root PATH]` | Push service descriptor to relay (cloud) |
|
|
137
|
+
| `pull_services.py` | `[--root PATH]` | Pull workspace composite (cloud) |
|
|
138
|
+
|
|
60
139
|
## Reference
|
|
61
140
|
|
|
62
|
-
| Topic
|
|
63
|
-
|
|
|
64
|
-
| Comment templates
|
|
65
|
-
| Status transitions
|
|
66
|
-
| Priority & estimates
|
|
67
|
-
| PR & git workflow
|
|
68
|
-
| Golden rules
|
|
141
|
+
| Topic | File |
|
|
142
|
+
| ------------------------- | -------------------------------------- |
|
|
143
|
+
| Comment templates | reference/comment-templates.md |
|
|
144
|
+
| Status transitions | reference/status-workflow.md |
|
|
145
|
+
| Priority & estimates | reference/priority-estimates.md |
|
|
146
|
+
| PR & git workflow | reference/pr-workflow.md |
|
|
147
|
+
| Golden rules | reference/golden-rules.md |
|
|
148
|
+
| Provider costs | reference/provider-costs.md |
|
|
149
|
+
| Graph schema | reference/graph-schema.md |
|
|
150
|
+
| Service descriptor schema | reference/service-descriptor-schema.md |
|
|
69
151
|
|
|
70
152
|
## Templates
|
|
71
153
|
|
|
72
|
-
Issue templates in `templates/` — feature, bug, chore, idea.
|
|
154
|
+
Issue templates in `templates/issues/` — feature, bug, chore, idea.
|
|
155
|
+
PR templates in `templates/pr/` — pull request description structure.
|
|
73
156
|
Stage files define how to fill templates; template files are pure structure.
|
|
74
157
|
|
|
75
158
|
## Golden Rules (Summary)
|
|
@@ -77,14 +160,18 @@ Stage files define how to fill templates; template files are pure structure.
|
|
|
77
160
|
1. Every status transition gets a comment (see `reference/comment-templates.md`)
|
|
78
161
|
2. Assignment required before In Progress
|
|
79
162
|
3. Checkboxes live in issue description, never comments
|
|
80
|
-
4. Use
|
|
163
|
+
4. Use dispatcher scripts for all issue operations — execute, don't describe
|
|
81
164
|
5. Session wrap posts a project update
|
|
82
165
|
6. Product scope filtering — only show projects/issues matching config labels
|
|
83
166
|
|
|
84
167
|
For full rules with verification gates, see `reference/golden-rules.md`.
|
|
85
168
|
|
|
86
|
-
##
|
|
169
|
+
## Architecture
|
|
170
|
+
|
|
171
|
+
The unified client (`flydocs_api.py`) reads tier from `.flydocs/config.json`
|
|
172
|
+
and routes operations automatically:
|
|
173
|
+
|
|
174
|
+
- **Cloud tier** → RelayBackend (HTTP calls to FlyDocs relay API)
|
|
175
|
+
- **Local tier** → LocalBackend (filesystem operations in `_local/file_store.py`)
|
|
87
176
|
|
|
88
|
-
|
|
89
|
-
The active mechanism skill provides implementations and calling conventions.
|
|
90
|
-
See the mechanism skill's SKILL.md for argument details and config reference.
|
|
177
|
+
Scripts never check tier. The client handles routing transparently.
|
|
@@ -12,7 +12,7 @@ alwaysApply: true
|
|
|
12
12
|
1. Every status transition gets a comment — no silent moves
|
|
13
13
|
2. Assignment required before In Progress
|
|
14
14
|
3. Checkboxes live in issue description, never comments
|
|
15
|
-
4. Use
|
|
15
|
+
4. Use workflow scripts for all issue operations — execute, don't describe
|
|
16
16
|
5. Session wrap posts a project update
|
|
17
17
|
6. Product scope filtering — only show projects/issues matching config labels
|
|
18
18
|
|
|
@@ -36,18 +36,19 @@ Capture → Refine → Activate → Implement → Review → Validate → Close
|
|
|
36
36
|
| Validate | stages/validate.md | QE |
|
|
37
37
|
| Close | stages/close.md | PM |
|
|
38
38
|
|
|
39
|
+
## When This Applies
|
|
40
|
+
|
|
41
|
+
These rules apply to **issue operations and status transitions only** — not
|
|
42
|
+
general coding. For building features, fixing bugs, and writing code, skip
|
|
43
|
+
this and just do the work.
|
|
44
|
+
|
|
39
45
|
## Intent Mapping
|
|
40
46
|
|
|
41
47
|
- "create/capture/log an issue" → Capture stage
|
|
42
48
|
- "triage/refine/spec out" → Refine stage
|
|
43
49
|
- "start work/activate/assign" → Activate stage
|
|
44
|
-
- "build/implement/fix" → Implement stage
|
|
45
|
-
- "review/check code" → Review stage
|
|
46
|
-
- "test/validate/QA" → Validate stage
|
|
47
50
|
- "close/ship/done" → Close stage
|
|
48
51
|
- "start session/wrap session" → Session management
|
|
49
52
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
Read the relevant stage file before acting. Do not guess procedures from training data.
|
|
53
|
-
Mechanism scripts handle all issue operations — see the active mechanism skill.
|
|
53
|
+
Dispatcher scripts handle all issue operations — see the workflow skill's
|
|
54
|
+
scripts directory. Slash commands load stage files automatically.
|
|
@@ -9,7 +9,7 @@ Non-negotiable rules enforced across all workflow stages.
|
|
|
9
9
|
### 1. Every Status Transition Gets a Comment
|
|
10
10
|
|
|
11
11
|
No silent state changes. Use templates from `reference/comment-templates.md`.
|
|
12
|
-
|
|
12
|
+
Workflow scripts enforce this — `issues.py transition` requires a comment argument.
|
|
13
13
|
|
|
14
14
|
### 2. Assignment Before In Progress
|
|
15
15
|
|
|
@@ -22,20 +22,20 @@ Acceptance criteria progress is tracked by checking boxes in the issue descripti
|
|
|
22
22
|
Never put completion marks in comments. Never create new checkboxes in comments.
|
|
23
23
|
See the Checkbox Protocol in `stages/implement.md`.
|
|
24
24
|
|
|
25
|
-
### 4. Use
|
|
25
|
+
### 4. Use Workflow Scripts — Execute, Don't Describe
|
|
26
26
|
|
|
27
|
-
For all issue operations (create, transition, comment, assign, query), use the
|
|
28
|
-
provided by the
|
|
27
|
+
For all issue operations (create, transition, comment, assign, query), use the dispatcher
|
|
28
|
+
scripts provided by the workflow skill. Run them. Do not say "you should run..." or
|
|
29
29
|
describe what a script would do. Execute and report the result.
|
|
30
30
|
|
|
31
31
|
### 5. Session Wrap Posts a Project Update
|
|
32
32
|
|
|
33
|
-
Every session wrap posts a project update via `
|
|
33
|
+
Every session wrap posts a project update via `session.py project-update`. Do not just
|
|
34
34
|
summarize in chat. Actually post. See `session.md` for the full protocol.
|
|
35
35
|
|
|
36
36
|
### 6. Product Scope Filtering
|
|
37
37
|
|
|
38
|
-
`
|
|
38
|
+
`issues.py list` automatically applies product scope from config using this cascade:
|
|
39
39
|
|
|
40
40
|
1. **`workspace.activeProjects` set** → scope to those projects (OR logic if multiple)
|
|
41
41
|
2. **`workspace.product.labelIds` set** → scope to issues with ALL those labels (AND logic)
|
|
@@ -46,23 +46,34 @@ work within the scoped results — they do not bypass product scope.
|
|
|
46
46
|
|
|
47
47
|
Never show out-of-scope issues, even if the user asks.
|
|
48
48
|
|
|
49
|
+
### 7. Sequential Script Execution
|
|
50
|
+
|
|
51
|
+
Run workflow scripts **one at a time, sequentially**. Never fire multiple
|
|
52
|
+
`issues.py`, `projects.py`, or `session.py` commands in parallel. The relay
|
|
53
|
+
API does not handle concurrent requests from the same workspace well — parallel
|
|
54
|
+
calls may timeout, produce empty output, or silently fail.
|
|
55
|
+
|
|
56
|
+
Wait for each script to return before running the next. If you need to create
|
|
57
|
+
multiple issues, create them one by one and confirm each succeeds before
|
|
58
|
+
proceeding.
|
|
59
|
+
|
|
49
60
|
---
|
|
50
61
|
|
|
51
62
|
## Verification Gates
|
|
52
63
|
|
|
53
64
|
After executing any workflow command, verify the result before responding:
|
|
54
65
|
|
|
55
|
-
| Action
|
|
56
|
-
|
|
57
|
-
| Capture
|
|
58
|
-
| Refine
|
|
59
|
-
| Activate
|
|
60
|
-
| Implement | `
|
|
61
|
-
| Block
|
|
62
|
-
| Review
|
|
63
|
-
| Validate
|
|
64
|
-
| Close
|
|
65
|
-
| Wrap
|
|
66
|
+
| Action | Script Used | Verify |
|
|
67
|
+
| --------- | --------------------------------------------- | ------------------------- |
|
|
68
|
+
| Capture | `issues.py create` | Issue identifier returned |
|
|
69
|
+
| Refine | `issues.py transition` → READY | Success response |
|
|
70
|
+
| Activate | `issues.py assign` + `issues.py transition` | Both succeed |
|
|
71
|
+
| Implement | `issues.py get` | Issue details loaded |
|
|
72
|
+
| Block | `issues.py transition` → BLOCKED | Success response |
|
|
73
|
+
| Review | `issues.py transition` → REVIEW/TESTING | Success response |
|
|
74
|
+
| Validate | `issues.py transition` → TESTING/IMPLEMENTING | Success response |
|
|
75
|
+
| Close | `issues.py transition` → COMPLETE | Success response |
|
|
76
|
+
| Wrap | `session.py project-update` | Update ID returned |
|
|
66
77
|
|
|
67
78
|
If any script fails: **stop, report, retry, escalate.** Do not continue to the next step.
|
|
68
79
|
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Context Graph Schema
|
|
2
|
+
|
|
3
|
+
Reference for the graph JSON structure stored at `flydocs/context/graph.json`.
|
|
4
|
+
|
|
5
|
+
## Top-Level Structure
|
|
6
|
+
|
|
7
|
+
```json
|
|
8
|
+
{
|
|
9
|
+
"version": 1,
|
|
10
|
+
"updated": "ISO-8601 timestamp",
|
|
11
|
+
"nodes": { "<id>": { ... } },
|
|
12
|
+
"edges": [ { ... } ]
|
|
13
|
+
}
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Node Schema
|
|
17
|
+
|
|
18
|
+
```json
|
|
19
|
+
{
|
|
20
|
+
"type": "skill | decision | issue | module | session | concept",
|
|
21
|
+
"label": "Human-readable name",
|
|
22
|
+
"path": "Relative file path (optional)",
|
|
23
|
+
"status": "Node-specific status (optional)",
|
|
24
|
+
"date": "ISO date for temporal nodes (optional)",
|
|
25
|
+
"tier": "Skill tier: behavioral | mechanism | premium (optional)",
|
|
26
|
+
"manual": true
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**ID conventions:**
|
|
31
|
+
|
|
32
|
+
| Type | Pattern | Example |
|
|
33
|
+
| -------- | --------------------------- | -------------------------------- |
|
|
34
|
+
| skill | `skill:{directory-name}` | `skill:typescript-strict` |
|
|
35
|
+
| decision | `decision:{3-digit-number}` | `decision:001` |
|
|
36
|
+
| issue | `issue:{identifier}` | `issue:FLY-56` |
|
|
37
|
+
| module | `module:{kebab-name}` | `module:install-script` |
|
|
38
|
+
| session | `session:{YYYY-MM-DD-seq}` | `session:2026-02-03-a` |
|
|
39
|
+
| concept | `concept:{kebab-name}` | `concept:progressive-disclosure` |
|
|
40
|
+
| repo | `repo:{owner/name}` | `repo:plastrlab/flydocs-app` |
|
|
41
|
+
|
|
42
|
+
## Edge Schema
|
|
43
|
+
|
|
44
|
+
```json
|
|
45
|
+
{
|
|
46
|
+
"from": "source node ID",
|
|
47
|
+
"to": "target node ID",
|
|
48
|
+
"rel": "RELATIONSHIP_TYPE",
|
|
49
|
+
"weight": 0.0-1.0,
|
|
50
|
+
"manual": true
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Weight guidelines:**
|
|
55
|
+
|
|
56
|
+
| Weight | Meaning |
|
|
57
|
+
| ------- | --------------------------- |
|
|
58
|
+
| 1.0 | Direct, strong relationship |
|
|
59
|
+
| 0.7-0.9 | Strong but indirect |
|
|
60
|
+
| 0.4-0.6 | Moderate association |
|
|
61
|
+
| 0.1-0.3 | Weak or tangential |
|
|
62
|
+
|
|
63
|
+
**Edges with `"manual": true`** are preserved when `graph_build.py` rebuilds
|
|
64
|
+
the graph from sources. Auto-derived edges are regenerated on each build.
|
|
65
|
+
|
|
66
|
+
## Relationship Types
|
|
67
|
+
|
|
68
|
+
| Relationship | Direction | Example |
|
|
69
|
+
| -------------- | ------------------------------ | ----------------------------------------- |
|
|
70
|
+
| `EXTENDS` | A extends B | ADR-004 extends ADR-001 |
|
|
71
|
+
| `IMPLEMENTS` | A implements B | Issue implements a decision |
|
|
72
|
+
| `DELEGATES_TO` | A delegates to B | Workflow delegates to mechanism |
|
|
73
|
+
| `PRECEDES` | A should load before B | typescript-strict precedes implementation |
|
|
74
|
+
| `MODIFIES` | A modifies B | Issue modifies a module |
|
|
75
|
+
| `WORKED_ON` | A worked on B | Session worked on an issue |
|
|
76
|
+
| `PRODUCED` | A produced B | Session produced a decision |
|
|
77
|
+
| `RELATES_TO` | A relates to B | General association |
|
|
78
|
+
| `SUPERSEDES` | A supersedes B | New decision replaces old |
|
|
79
|
+
| `BLOCKS` | A blocks B | Issue blocks another issue |
|
|
80
|
+
| `PROVIDES` | A exposes interface B consumes | Repo provides REST API to sibling |
|
|
81
|
+
| `CONSUMES` | A depends on B's interface | Repo consumes another's API |
|
|
82
|
+
|
|
83
|
+
### Cross-Repo Edge Properties
|
|
84
|
+
|
|
85
|
+
Edges of type `PROVIDES` and `CONSUMES` carry additional properties:
|
|
86
|
+
|
|
87
|
+
```json
|
|
88
|
+
{
|
|
89
|
+
"from": "repo:plastrlab/flydocs-core",
|
|
90
|
+
"to": "repo:plastrlab/flydocs-app",
|
|
91
|
+
"rel": "PROVIDES",
|
|
92
|
+
"weight": 1.0,
|
|
93
|
+
"interface": "REST API /api/relay/*",
|
|
94
|
+
"description": "Core CLI pushes config and descriptors to relay endpoints"
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
| Property | Type | Description |
|
|
99
|
+
| ------------- | ------ | ------------------------------------------------------ |
|
|
100
|
+
| `interface` | string | What is exposed or consumed (endpoint, event, package) |
|
|
101
|
+
| `description` | string | Brief context about the relationship |
|
|
102
|
+
|
|
103
|
+
## Repo Node Schema
|
|
104
|
+
|
|
105
|
+
Repo nodes are derived from `flydocs/context/service.json` by `graph_build.py`.
|
|
106
|
+
See `service-descriptor-schema.md` for the full ServiceDescriptor interface.
|
|
107
|
+
|
|
108
|
+
```json
|
|
109
|
+
{
|
|
110
|
+
"type": "repo",
|
|
111
|
+
"label": "flydocs-app",
|
|
112
|
+
"path": "flydocs/context/service.json",
|
|
113
|
+
"purpose": "Web dashboard and relay API for FlyDocs cloud tier",
|
|
114
|
+
"stack": ["next", "convex", "typescript"]
|
|
115
|
+
}
|
|
116
|
+
```
|
|
@@ -56,28 +56,43 @@ When in doubt, create a PR. It's easier to merge a PR than to revert a direct co
|
|
|
56
56
|
|
|
57
57
|
## PR Description Template
|
|
58
58
|
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
The canonical PR template lives at `templates/pr/default.md`. Use the PR
|
|
60
|
+
dispatcher to create PRs with auto-populated issue context:
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
```bash
|
|
63
|
+
python3 .claude/skills/flydocs-workflow/scripts/issues.py pr --issue FLY-123
|
|
64
|
+
```
|
|
63
65
|
|
|
64
|
-
|
|
66
|
+
Options:
|
|
65
67
|
|
|
66
|
-
|
|
68
|
+
| Flag | Purpose |
|
|
69
|
+
| ----------- | ----------------------------------------- |
|
|
70
|
+
| `--issue` | Link to issue (auto-populates title + AC) |
|
|
71
|
+
| `--title` | Override PR title |
|
|
72
|
+
| `--base` | Target branch (defaults to main/master) |
|
|
73
|
+
| `--draft` | Create as draft PR |
|
|
74
|
+
| `--dry-run` | Preview without creating |
|
|
67
75
|
|
|
68
|
-
|
|
69
|
-
- [Key change 2]
|
|
70
|
-
- [Key change 3]
|
|
76
|
+
The script:
|
|
71
77
|
|
|
72
|
-
|
|
78
|
+
- Detects platform (GitHub, GitLab) from git remote
|
|
79
|
+
- Reads the PR template and fills in issue context
|
|
80
|
+
- Creates the PR via `gh pr create` or `glab mr create`
|
|
81
|
+
- Posts a comment on the issue linking the PR
|
|
73
82
|
|
|
74
|
-
|
|
75
|
-
|
|
83
|
+
**Enforcement:** A PostToolUse hook (`post-pr-check.py`) detects direct
|
|
84
|
+
`gh pr create` or `glab mr create` calls and warns if required sections
|
|
85
|
+
(Summary, Test Plan) are missing.
|
|
76
86
|
|
|
77
|
-
|
|
87
|
+
### Template Sections
|
|
78
88
|
|
|
79
|
-
|
|
80
|
-
|
|
89
|
+
| Section | Required | Auto-populated |
|
|
90
|
+
| ----------------------- | -------- | ------------------------ |
|
|
91
|
+
| **Summary** | Yes | From issue title |
|
|
92
|
+
| **Changes** | No | Manual |
|
|
93
|
+
| **Test Plan** | Yes | Manual |
|
|
94
|
+
| **Acceptance Criteria** | No | From issue AC checkboxes |
|
|
95
|
+
| **Notes** | No | Manual |
|
|
81
96
|
|
|
82
97
|
## PR Workflow in Practice
|
|
83
98
|
|
|
@@ -88,7 +103,7 @@ After self-review (step 7 in `implement.md`), before handing off to review:
|
|
|
88
103
|
1. Create branch: `git checkout -b <type>/<ref>-<slug>`
|
|
89
104
|
2. Stage and commit changes with a descriptive message
|
|
90
105
|
3. Push branch: `git push -u origin <branch>`
|
|
91
|
-
4. Create PR
|
|
106
|
+
4. Create PR: `python3 .claude/skills/flydocs-workflow/scripts/issues.py pr --issue <ref>`
|
|
92
107
|
5. Include the PR link in the "Ready for Review" comment
|
|
93
108
|
|
|
94
109
|
### During Review Stage
|