@flydocs/cli 0.5.0-beta.0

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.
Files changed (134) hide show
  1. package/README.md +96 -0
  2. package/dist/cli.js +2666 -0
  3. package/package.json +32 -0
  4. package/template/.claude/CLAUDE.md +90 -0
  5. package/template/.claude/agents/README.md +19 -0
  6. package/template/.claude/agents/implementation-agent.md +29 -0
  7. package/template/.claude/agents/pm-agent.md +29 -0
  8. package/template/.claude/agents/research-agent.md +25 -0
  9. package/template/.claude/agents/review-agent.md +29 -0
  10. package/template/.claude/commands/activate.md +10 -0
  11. package/template/.claude/commands/attach.md +9 -0
  12. package/template/.claude/commands/block.md +10 -0
  13. package/template/.claude/commands/capture.md +10 -0
  14. package/template/.claude/commands/close.md +10 -0
  15. package/template/.claude/commands/flydocs-setup.md +598 -0
  16. package/template/.claude/commands/flydocs-update.md +27 -0
  17. package/template/.claude/commands/implement.md +10 -0
  18. package/template/.claude/commands/new-project.md +11 -0
  19. package/template/.claude/commands/project-update.md +10 -0
  20. package/template/.claude/commands/refine.md +10 -0
  21. package/template/.claude/commands/review.md +10 -0
  22. package/template/.claude/commands/start-session.md +10 -0
  23. package/template/.claude/commands/status.md +10 -0
  24. package/template/.claude/commands/validate.md +10 -0
  25. package/template/.claude/commands/wrap-session.md +10 -0
  26. package/template/.claude/settings.json +49 -0
  27. package/template/.claude/skills/README.md +293 -0
  28. package/template/.claude/skills/flydocs-cloud/SKILL.md +96 -0
  29. package/template/.claude/skills/flydocs-cloud/cursor-rule.mdc +50 -0
  30. package/template/.claude/skills/flydocs-cloud/scripts/assign.py +38 -0
  31. package/template/.claude/skills/flydocs-cloud/scripts/assign_cycle.py +44 -0
  32. package/template/.claude/skills/flydocs-cloud/scripts/assign_milestone.py +44 -0
  33. package/template/.claude/skills/flydocs-cloud/scripts/comment.py +39 -0
  34. package/template/.claude/skills/flydocs-cloud/scripts/create_issue.py +100 -0
  35. package/template/.claude/skills/flydocs-cloud/scripts/create_milestone.py +46 -0
  36. package/template/.claude/skills/flydocs-cloud/scripts/create_project.py +40 -0
  37. package/template/.claude/skills/flydocs-cloud/scripts/estimate.py +38 -0
  38. package/template/.claude/skills/flydocs-cloud/scripts/flydocs_api.py +277 -0
  39. package/template/.claude/skills/flydocs-cloud/scripts/get_issue.py +77 -0
  40. package/template/.claude/skills/flydocs-cloud/scripts/link.py +47 -0
  41. package/template/.claude/skills/flydocs-cloud/scripts/list_cycles.py +35 -0
  42. package/template/.claude/skills/flydocs-cloud/scripts/list_issues.py +105 -0
  43. package/template/.claude/skills/flydocs-cloud/scripts/list_milestones.py +40 -0
  44. package/template/.claude/skills/flydocs-cloud/scripts/list_projects.py +45 -0
  45. package/template/.claude/skills/flydocs-cloud/scripts/priority.py +38 -0
  46. package/template/.claude/skills/flydocs-cloud/scripts/project_update.py +59 -0
  47. package/template/.claude/skills/flydocs-cloud/scripts/transition.py +67 -0
  48. package/template/.claude/skills/flydocs-cloud/scripts/update_description.py +47 -0
  49. package/template/.claude/skills/flydocs-cloud/scripts/update_issue.py +111 -0
  50. package/template/.claude/skills/flydocs-context-graph/SKILL.md +87 -0
  51. package/template/.claude/skills/flydocs-context-graph/schema.md +78 -0
  52. package/template/.claude/skills/flydocs-context-graph/scripts/graph_build.py +299 -0
  53. package/template/.claude/skills/flydocs-context-graph/scripts/graph_context.py +338 -0
  54. package/template/.claude/skills/flydocs-context-graph/scripts/graph_query.py +191 -0
  55. package/template/.claude/skills/flydocs-context-graph/scripts/graph_session.py +161 -0
  56. package/template/.claude/skills/flydocs-context-graph/scripts/graph_update.py +194 -0
  57. package/template/.claude/skills/flydocs-context-graph/scripts/graph_utils.py +118 -0
  58. package/template/.claude/skills/flydocs-estimates/SKILL.md +384 -0
  59. package/template/.claude/skills/flydocs-estimates/references/provider-costs.md +152 -0
  60. package/template/.claude/skills/flydocs-figma/SKILL.md +377 -0
  61. package/template/.claude/skills/flydocs-figma/references/PROMPTING.md +108 -0
  62. package/template/.claude/skills/flydocs-figma/references/TROUBLESHOOTING.md +112 -0
  63. package/template/.claude/skills/flydocs-local/SKILL.md +103 -0
  64. package/template/.claude/skills/flydocs-local/cursor-rule.mdc +43 -0
  65. package/template/.claude/skills/flydocs-local/scripts/assign.py +20 -0
  66. package/template/.claude/skills/flydocs-local/scripts/comment.py +27 -0
  67. package/template/.claude/skills/flydocs-local/scripts/create_issue.py +44 -0
  68. package/template/.claude/skills/flydocs-local/scripts/estimate.py +37 -0
  69. package/template/.claude/skills/flydocs-local/scripts/flydocs_api.py +272 -0
  70. package/template/.claude/skills/flydocs-local/scripts/get_issue.py +20 -0
  71. package/template/.claude/skills/flydocs-local/scripts/link.py +41 -0
  72. package/template/.claude/skills/flydocs-local/scripts/list_issues.py +34 -0
  73. package/template/.claude/skills/flydocs-local/scripts/priority.py +37 -0
  74. package/template/.claude/skills/flydocs-local/scripts/project_update.py +67 -0
  75. package/template/.claude/skills/flydocs-local/scripts/status_summary.py +16 -0
  76. package/template/.claude/skills/flydocs-local/scripts/transition.py +24 -0
  77. package/template/.claude/skills/flydocs-local/scripts/update_description.py +35 -0
  78. package/template/.claude/skills/flydocs-local/scripts/update_issue.py +84 -0
  79. package/template/.claude/skills/flydocs-workflow/SKILL.md +85 -0
  80. package/template/.claude/skills/flydocs-workflow/cursor-rule.mdc +53 -0
  81. package/template/.claude/skills/flydocs-workflow/reference/comment-templates.md +131 -0
  82. package/template/.claude/skills/flydocs-workflow/reference/golden-rules.md +76 -0
  83. package/template/.claude/skills/flydocs-workflow/reference/priority-estimates.md +28 -0
  84. package/template/.claude/skills/flydocs-workflow/reference/status-workflow.md +50 -0
  85. package/template/.claude/skills/flydocs-workflow/session.md +128 -0
  86. package/template/.claude/skills/flydocs-workflow/stages/activate.md +46 -0
  87. package/template/.claude/skills/flydocs-workflow/stages/capture.md +50 -0
  88. package/template/.claude/skills/flydocs-workflow/stages/close.md +32 -0
  89. package/template/.claude/skills/flydocs-workflow/stages/implement.md +124 -0
  90. package/template/.claude/skills/flydocs-workflow/stages/refine.md +51 -0
  91. package/template/.claude/skills/flydocs-workflow/stages/review.md +86 -0
  92. package/template/.claude/skills/flydocs-workflow/stages/validate.md +90 -0
  93. package/template/.claude/skills/flydocs-workflow/templates/bug.md +95 -0
  94. package/template/.claude/skills/flydocs-workflow/templates/chore.md +75 -0
  95. package/template/.claude/skills/flydocs-workflow/templates/feature.md +93 -0
  96. package/template/.claude/skills/flydocs-workflow/templates/idea.md +84 -0
  97. package/template/.cursor/agents/implementation-agent.md +28 -0
  98. package/template/.cursor/agents/pm-agent.md +27 -0
  99. package/template/.cursor/agents/research-agent.md +23 -0
  100. package/template/.cursor/agents/review-agent.md +27 -0
  101. package/template/.cursor/hooks.json +29 -0
  102. package/template/.cursor/mcp.json +16 -0
  103. package/template/.env.example +44 -0
  104. package/template/.flydocs/config.json +104 -0
  105. package/template/.flydocs/hooks/auto-approve.py +71 -0
  106. package/template/.flydocs/hooks/post-edit.py +72 -0
  107. package/template/.flydocs/hooks/prefer-scripts.py +89 -0
  108. package/template/.flydocs/hooks/prompt-submit.py +277 -0
  109. package/template/.flydocs/scripts/generate_manifest.py +287 -0
  110. package/template/.flydocs/scripts/skill_manager.py +541 -0
  111. package/template/.flydocs/templates/README.md +46 -0
  112. package/template/.flydocs/templates/bug.md +166 -0
  113. package/template/.flydocs/templates/chore.md +110 -0
  114. package/template/.flydocs/templates/design-system/README.md +27 -0
  115. package/template/.flydocs/templates/design-system/component-patterns.md +92 -0
  116. package/template/.flydocs/templates/design-system/token-mapping.md +168 -0
  117. package/template/.flydocs/templates/feature.md +173 -0
  118. package/template/.flydocs/templates/idea.md +122 -0
  119. package/template/.flydocs/templates/instructions.md +228 -0
  120. package/template/.flydocs/templates/quick-capture.md +35 -0
  121. package/template/.flydocs/templates/scripts/check-design-system.template.mjs +179 -0
  122. package/template/.flydocs/version +1 -0
  123. package/template/AGENTS.md +95 -0
  124. package/template/CHANGELOG.md +271 -0
  125. package/template/flydocs/README.md +186 -0
  126. package/template/flydocs/context/project.md +51 -0
  127. package/template/flydocs/design-system/README.md +126 -0
  128. package/template/flydocs/design-system/component-patterns.md +173 -0
  129. package/template/flydocs/design-system/token-mapping.md +114 -0
  130. package/template/flydocs/knowledge/INDEX.md +100 -0
  131. package/template/flydocs/knowledge/README.md +62 -0
  132. package/template/flydocs/knowledge/product/personas.md +79 -0
  133. package/template/flydocs/knowledge/product/user-flows.md +88 -0
  134. package/template/manifest.json +221 -0
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Design System Validation Script
3
+ *
4
+ * Scans source files for design system violations.
5
+ * Configurable forbidden/allowed patterns.
6
+ *
7
+ * Usage: node scripts/check-design-system.mjs
8
+ *
9
+ * Configure by editing the FORBIDDEN_PATTERNS and ALLOWED_PATTERNS arrays.
10
+ */
11
+
12
+ import fs from 'node:fs'
13
+ import path from 'node:path'
14
+
15
+ const ROOT = process.cwd()
16
+ const SRC_DIR = path.join(ROOT, 'src')
17
+
18
+ const FILE_EXTENSIONS = new Set(['.ts', '.tsx', '.css', '.jsx', '.js'])
19
+
20
+ /**
21
+ * Forbidden patterns - these will cause validation to fail
22
+ *
23
+ * Customize based on your design system:
24
+ * - Add patterns for hardcoded values you want to catch
25
+ * - Remove patterns that don't apply to your framework
26
+ */
27
+ const FORBIDDEN_PATTERNS = [
28
+ {
29
+ name: 'Hardcoded spacing arbitrary values (p-/m-/gap-[..px])',
30
+ regex: /\b(p|px|py|pt|pb|pl|pr|m|mx|my|mt|mb|ml|mr|gap)-\[[0-9.]+px\]/g,
31
+ },
32
+ {
33
+ name: 'Hardcoded radius arbitrary values (rounded-[..px])',
34
+ regex: /\brounded-\[[0-9.]+px\]/g,
35
+ },
36
+ {
37
+ name: 'Hardcoded hex colors (#fff/#ffffff)',
38
+ regex: /#[0-9a-fA-F]{3,8}/g,
39
+ },
40
+ {
41
+ name: 'Hardcoded rgba() colors',
42
+ regex: /rgba\(/g,
43
+ },
44
+ ]
45
+
46
+ /**
47
+ * Allowed patterns - these are exceptions that won't be flagged
48
+ *
49
+ * Common exceptions:
50
+ * - Layout/intrinsic sizing (w-[Xpx], h-[Xpx], max-w-[Xpx])
51
+ * - Specific one-off values that are documented
52
+ */
53
+ const ALLOWED_PATTERNS = [
54
+ // Layout/intrinsic sizing whitelist
55
+ /\b(max-w|min-w|w|h|max-h|min-h)-\[[0-9.]+px\]/g,
56
+ // Thin borders
57
+ /\bborder-\[0\.5px\]/g,
58
+ ]
59
+
60
+ /**
61
+ * Paths to skip during validation
62
+ *
63
+ * Add paths that should not be checked:
64
+ * - Style definition files
65
+ * - Mocks and test utilities
66
+ * - Generated files
67
+ */
68
+ const SKIP_PATH_FRAGMENTS = [
69
+ `${path.sep}src${path.sep}styles${path.sep}`,
70
+ `${path.sep}src${path.sep}mocks${path.sep}`,
71
+ `${path.sep}src${path.sep}test${path.sep}`,
72
+ `${path.sep}CLAUDE.md`,
73
+ `${path.sep}node_modules${path.sep}`,
74
+ ]
75
+
76
+ function shouldSkipFile(filePath) {
77
+ return SKIP_PATH_FRAGMENTS.some((frag) => filePath.includes(frag))
78
+ }
79
+
80
+ function listFilesRecursive(dirPath) {
81
+ const results = []
82
+
83
+ if (!fs.existsSync(dirPath)) {
84
+ return results
85
+ }
86
+
87
+ const entries = fs.readdirSync(dirPath, { withFileTypes: true })
88
+ for (const entry of entries) {
89
+ const fullPath = path.join(dirPath, entry.name)
90
+ if (entry.isDirectory()) {
91
+ results.push(...listFilesRecursive(fullPath))
92
+ continue
93
+ }
94
+
95
+ const ext = path.extname(entry.name)
96
+ if (FILE_EXTENSIONS.has(ext)) {
97
+ results.push(fullPath)
98
+ }
99
+ }
100
+
101
+ return results
102
+ }
103
+
104
+ function maskAllowed(text) {
105
+ let masked = text
106
+ for (const allowed of ALLOWED_PATTERNS) {
107
+ masked = masked.replaceAll(allowed, '')
108
+ }
109
+ return masked
110
+ }
111
+
112
+ function findMatches(content, regex) {
113
+ const matches = []
114
+
115
+ const re = new RegExp(regex.source, regex.flags)
116
+ let m
117
+ while ((m = re.exec(content)) !== null) {
118
+ matches.push({ index: m.index, match: m[0] })
119
+ }
120
+
121
+ return matches
122
+ }
123
+
124
+ function getLineInfo(content, index) {
125
+ const upToIndex = content.slice(0, index)
126
+ const line = upToIndex.split('\n').length
127
+ const lineStart = upToIndex.lastIndexOf('\n') + 1
128
+ const lineEnd = content.indexOf('\n', index)
129
+ const end = lineEnd === -1 ? content.length : lineEnd
130
+ const lineText = content.slice(lineStart, end)
131
+ return { line, lineText }
132
+ }
133
+
134
+ function main() {
135
+ if (!fs.existsSync(SRC_DIR)) {
136
+ console.error('Cannot find src/ directory to scan.')
137
+ process.exit(2)
138
+ }
139
+
140
+ const files = listFilesRecursive(SRC_DIR).filter((f) => !shouldSkipFile(f))
141
+
142
+ const violations = []
143
+
144
+ for (const filePath of files) {
145
+ const raw = fs.readFileSync(filePath, 'utf8')
146
+ const content = maskAllowed(raw)
147
+
148
+ for (const rule of FORBIDDEN_PATTERNS) {
149
+ const matches = findMatches(content, rule.regex)
150
+ for (const match of matches) {
151
+ const { line, lineText } = getLineInfo(raw, match.index)
152
+ violations.push({
153
+ file: path.relative(ROOT, filePath),
154
+ line,
155
+ rule: rule.name,
156
+ snippet: lineText.trim(),
157
+ })
158
+ }
159
+ }
160
+ }
161
+
162
+ if (violations.length === 0) {
163
+ console.log('✅ Design system check passed.')
164
+ return
165
+ }
166
+
167
+ console.error(`❌ Design system check failed: ${violations.length} violation(s) found.\n`)
168
+ for (const v of violations) {
169
+ console.error(` ${v.file}:${v.line}`)
170
+ console.error(` Rule: ${v.rule}`)
171
+ console.error(` Code: ${v.snippet}\n`)
172
+ }
173
+
174
+ process.exit(1)
175
+ }
176
+
177
+ main()
178
+
179
+
@@ -0,0 +1 @@
1
+ 0.4.0
@@ -0,0 +1,95 @@
1
+ # FlyDocs Agent Instructions
2
+
3
+ Prefer reading project documentation over guessing from training data.
4
+ When performing workflow, issue management, or process tasks, consult the
5
+ relevant documentation files before acting.
6
+
7
+ ## Rules
8
+
9
+ 1. **Use scripts for all issue operations.** Create, transition, comment, assign — execute scripts, don't describe actions.
10
+ 2. **Every status transition gets a comment.** No silent moves.
11
+ 3. **Assignment required before In Progress.** Always assign before starting work.
12
+ 4. **Checkboxes live in issue description, never comments.** Update the description to track progress.
13
+ 5. **Session wrap posts a summary.** Summarize progress at end of session.
14
+ 6. **No secrets in commits.** Never commit `.env`, credentials, or API keys.
15
+
16
+ ## Workflow
17
+
18
+ The development lifecycle follows seven stages:
19
+
20
+ ```
21
+ Capture → Refine → Activate → Implement → Review → Validate → Close
22
+ ```
23
+
24
+ | Stage | What Happens |
25
+ |-------|--------------|
26
+ | Capture | Create issue from input (feature, bug, chore, idea) |
27
+ | Refine | Triage, fill template, set priority and estimate |
28
+ | Activate | Assign to person, transition to In Progress |
29
+ | Implement | Build incrementally, document decisions, self-review |
30
+ | Review | Code quality check against acceptance criteria |
31
+ | Validate | User acceptance testing, collect approval |
32
+ | Close | Verify approval, mark as Done |
33
+
34
+ Detailed procedures: `.claude/skills/flydocs-workflow/`
35
+
36
+ ## Issue Operations
37
+
38
+ Scripts handle all issue management. The active backend (local files or cloud provider) determines the implementation.
39
+
40
+ **Available operations:** create issue, transition status, add comment, list issues, get issue details, assign, update description, status summary.
41
+
42
+ Script location: `.claude/skills/flydocs-local/scripts/` or `.claude/skills/flydocs-cloud/scripts/`
43
+
44
+ ## Premium Skills
45
+
46
+ | Skill | Documentation |
47
+ |-------|---------------|
48
+ | Figma Integration | `.claude/skills/flydocs-figma/` — design extraction, token mapping |
49
+ | Cost Estimation | `.claude/skills/flydocs-estimates/` — AI token/labor estimates (opt-in) |
50
+
51
+ ## Writing Style
52
+
53
+ When writing or editing any copy — product docs, marketing pages, website copy, wikis, etc:
54
+
55
+ - Write like a sharp colleague, not a brochure. Clear, confident, human.
56
+ - Active voice by default. "We built X" not "X was built to enable..."
57
+ - Vary sentence rhythm. Short sentences land. Longer ones can unpack an idea when needed.
58
+ - Kill corporate filler: "leverage", "utilize", "facilitate", "in order to", "it should be noted that", "best-in-class", "robust."
59
+ - Use "you" and "we" naturally. Talk to the reader, not past them.
60
+ - Technical accuracy matters — but explain concepts plainly before going deep.
61
+ - No emoji. No exclamation marks. No hype. Let the product speak through clarity, not enthusiasm.
62
+ - Prefer concrete over abstract. "Cuts deploy time from 20 minutes to 3" beats "dramatically accelerates deployment workflows."
63
+ - One idea per paragraph. If a sentence doesn't earn its place, cut it.
64
+ - Don't repeat the same stat or claim more than once per page. Cross-page repetition is fine — readers land on individual pages.
65
+ - When differentiating, name what the alternative does and where it falls short. Don't just assert we're better — show the specific gap.
66
+
67
+ ## Project Context
68
+
69
+ | File | Purpose |
70
+ |------|---------|
71
+ | `flydocs/context/project.md` | Product scope, tech stack, active priorities |
72
+ | `.flydocs/config.json` | Configuration — tier, provider, labels, active projects |
73
+
74
+ <!-- flydocs:skills-manifest:start -->
75
+ ## Skills Index
76
+
77
+ IMPORTANT: Prefer skill-led reasoning over pre-training reasoning.
78
+ Consult the relevant skill BEFORE writing code or making workflow decisions.
79
+
80
+ | Skill | Triggers | Entry |
81
+ |-------|----------|-------|
82
+ | flydocs-cloud | create issue, transition, comment, list issues, assign, update description, update issue, project update, Linear, cloud | .claude/skills/flydocs-cloud/SKILL.md |
83
+ | flydocs-estimates | estimate, cost, token usage, API cost, labor estimate, sizing, effort | .claude/skills/flydocs-estimates/SKILL.md |
84
+ | flydocs-figma | Figma, design, screenshot, token mapping, component from design, pixel-perfect, design system | .claude/skills/flydocs-figma/SKILL.md |
85
+ | flydocs-local | create issue, transition, comment, list issues, assign, update description, status summary, local | .claude/skills/flydocs-local/SKILL.md |
86
+ | flydocs-workflow | capture, refine, activate, implement, review, validate, close, session, workflow, transition, status, issue | .claude/skills/flydocs-workflow/SKILL.md |
87
+ <!-- flydocs:skills-manifest:end -->
88
+
89
+ ## Platform Configuration
90
+
91
+ | Platform | Primary Config |
92
+ |----------|----------------|
93
+ | Claude Code | `.claude/CLAUDE.md` |
94
+ | Cursor | `.cursor/rules/*.mdc` |
95
+ | Codex / Windsurf / Others | This file (`AGENTS.md`) |
@@ -0,0 +1,271 @@
1
+ # Changelog
2
+
3
+ All notable changes to FlyDocs Core are documented here.
4
+
5
+ Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
+ Versioning: [Semantic Versioning](https://semver.org/).
7
+
8
+ ---
9
+
10
+ ## [0.4.0] — 2026-02-18
11
+
12
+ ### Added
13
+ - **Context Graph skill** (`flydocs-context-graph`) — relationship-aware knowledge
14
+ graph that connects skills, ADRs, issues, modules, and sessions. Implemented as
15
+ ADR-006 across five phases:
16
+ - `graph_build.py` — scans skills and ADRs, extracts cross-references, produces
17
+ `flydocs/context/graph.json`. Manual nodes/edges preserved on rebuild.
18
+ - `graph_query.py` — BFS traversal with depth, relationship type, and direction
19
+ filters. Outputs compressed markdown or JSON.
20
+ - `graph_update.py` — incremental add/remove for nodes and edges.
21
+ - `graph_context.py` — assembles compressed context block (~200-400 tokens) for
22
+ the prime hook given active issue and git branch.
23
+ - `graph_session.py` — records session outcomes as graph nodes with WORKED_ON
24
+ and PRODUCED edges for cross-session continuity.
25
+ - **Automatic context injection** — `prompt-submit.py` hook now calls `graph_context.py`
26
+ every prompt. Agents receive a temporal anchor (current date) and related decisions,
27
+ skills, and prior session summaries without any manual effort.
28
+ - **Skill ordering in manifest** — `generate_manifest.py` reads PRECEDES edges from
29
+ the graph and adds a "Loads After" column to the skills index table.
30
+ - **Install-time graph generation** — both fresh install and update paths call
31
+ `graph_build.py` after skill installation. Every FlyDocs project gets a context
32
+ graph automatically.
33
+
34
+ ### Changed
35
+ - **Session wrap procedure** — `session.md` now includes a step to record session
36
+ outcomes in the context graph via `graph_session.py`. Skips silently if not installed.
37
+ - **Session staleness policy** — session nodes within 7 days get full weight, linear
38
+ decay to 30 days, then excluded from context.
39
+
40
+ ### Migration
41
+ - **`.gitignore` update** — `flydocs/context/graph.json` is automatically added to
42
+ `.gitignore` during update if missing. The graph is gitignored because it contains
43
+ session-specific data and can be rebuilt from sources.
44
+
45
+ ---
46
+
47
+ ## [0.3.10] — 2026-02-17
48
+
49
+ ### Fixed
50
+ - **API null data crash** (FLY-178) — `flydocs_api.py` now normalizes `null` data
51
+ responses to empty dict before returning. Fixes `AttributeError` crashes in all
52
+ 20+ scripts when Linear returns API errors. `create_issue.py` also retries without
53
+ labels when label IDs are rejected (stale config after team migration).
54
+ - **`assign_milestone.py` flag parsing** (FLY-179) — rewritten with argparse.
55
+ Now supports both positional (`assign_milestone.py REF UUID`) and flag
56
+ (`--milestone UUID`) syntax. Previously `--milestone` was captured as the
57
+ milestone ID value.
58
+ - **`list_milestones.py` missing fields** (FLY-180) — GraphQL query now includes
59
+ `sortOrder` and `project { id name }`. Output sorted by project then sortOrder.
60
+ - **Community skills recommendation UI** (FLY-48) — rendering artifacts resolved
61
+ by the `prompt_community_skills()` rewrite in 0.3.9.
62
+
63
+ ---
64
+
65
+ ## [0.3.9] — 2026-02-17
66
+
67
+ ### Added
68
+ - **Skill search and install CLI** (ENG-443) — `flydocs skills` subcommand with
69
+ `search`, `add`, `remove`, and `list` operations. Search the curated community
70
+ skills catalog, install from known names or GitHub repo references, and manage
71
+ installed skills post-install. Platform skills (`flydocs-*`) are guarded from
72
+ modification. Installs validate SKILL.md frontmatter, copy cursor rules, update
73
+ config, and regenerate the skill manifest automatically.
74
+ - **Install.sh skill discovery update** (ENG-445) — community skill installation
75
+ now delegates to `skill_manager.py` (full directory download with validation)
76
+ instead of single-file curl. Added `--yes`/`-y` flag for non-interactive mode.
77
+ Enhanced stack detection: tsconfig.json (TypeScript), vitest, jest, testing-library.
78
+
79
+ ---
80
+
81
+ ## [0.3.8] — 2026-02-14
82
+
83
+ ### Added
84
+ - **`create_issue.py --description-file` and stdin** — both cloud and local tiers now
85
+ accept `--description-file PATH` or piped stdin for issue descriptions. Eliminates
86
+ the two-step create + update_description workaround for long descriptions.
87
+ - **`update_issue.py --title`** — cloud tier bulk update script now supports renaming
88
+ issues via `--title "new title"`.
89
+
90
+ ---
91
+
92
+ ## [0.3.7] — 2026-02-11
93
+
94
+ ### Added
95
+ - **Skill manifest generator** (ENG-442) — `generate_manifest.py` scans SKILL.md
96
+ frontmatter and produces a compressed skills index table. Injected into CLAUDE.md
97
+ and AGENTS.md between `<!-- flydocs:skills-manifest -->` markers. Bridges skill
98
+ discovery with on-demand retrieval — agents see triggers in always-loaded context.
99
+ - **`.flydocs/scripts/` owned directory** — shared utility scripts (not mechanism
100
+ scripts) now have a dedicated home, managed by manifest.json ownership.
101
+
102
+ ---
103
+
104
+ ## [0.3.6] — 2026-02-10
105
+
106
+ ### Added
107
+ - **Milestone, project, and dueDate in issue output** — `list_issues.py` now returns
108
+ `milestone`, `milestoneId`, `milestoneSortOrder`, `project`, `projectId`, and `dueDate`
109
+ for every issue. `get_issue.py` returns the same fields (minus `milestoneSortOrder`).
110
+ Enables milestone-grouped dashboards and priority-based session planning.
111
+
112
+ ### Changed
113
+ - **Session start workflow rewritten** — `session.md` now instructs agents to group issues
114
+ by milestone (in milestone order), identify the current milestone, suggest a starting point
115
+ based on priority cascade (blocked → in-progress → due soon → highest priority in current
116
+ milestone), and surface other product issues separately. Never shows issues outside
117
+ the product scope.
118
+
119
+ ### Fixed
120
+ - **`create_milestone.py` missing projectId** — `ProjectMilestoneCreateInput` requires a
121
+ `projectId`. Script now defaults to first `activeProject` from config, with `--project`
122
+ flag to override.
123
+
124
+ ---
125
+
126
+ ## [0.3.5] — 2026-02-10
127
+
128
+ ### Added
129
+ - **`list_projects.py` product scope** (ENG-475) — now respects `workspace.activeProjects`
130
+ config. `--all` bypasses product scope to show all team projects.
131
+
132
+ ### Fixed
133
+ - **`list_projects.py` 400 error** (ENG-474) — state filter was using nested
134
+ `{type: {nin: [...]}}` instead of direct `StringComparator` `{nin: [...]}`.
135
+ Both `--active` (started only) and default (excludes completed/canceled) now work.
136
+ - **`list_projects.py --active`** — now correctly filters to only `started` projects
137
+ instead of being a no-op duplicate of the default behavior.
138
+ - **`assign_milestone.py` error handling** — null-safe check on API response prevents
139
+ `AttributeError` when GraphQL returns errors.
140
+
141
+ ---
142
+
143
+ ## [0.3.4] — 2026-02-10
144
+
145
+ ### Added
146
+ - **`list_issues.py --milestone` filter** — filter issues by project milestone ID.
147
+ Get milestone IDs from `list_milestones.py`, then pass to `list_issues.py --milestone <ID>`
148
+ to see all issues within a specific milestone.
149
+
150
+ ---
151
+
152
+ ## [0.3.3] — 2026-02-10
153
+
154
+ ### Fixed
155
+ - **Shell escaping in `update_description.py`** — descriptions with apostrophes,
156
+ parentheses, quotes, and other shell metacharacters no longer break when passed
157
+ via `--text`. Scripts now accept stdin as input, allowing safe heredoc piping:
158
+ `python3 update_description.py ENG-123 <<'EOF'`
159
+ - **Shell escaping in `comment.py`** — same stdin fallback added. Comment body
160
+ argument is now optional when piping via stdin.
161
+
162
+ ---
163
+
164
+ ## [0.3.2] — 2026-02-09
165
+
166
+ ### Fixed
167
+ - **API connection reliability** — reduced socket timeout from 30s to 10s and increased
168
+ max retries from 3 to 5. Resolves intermittent hangs caused by DNS returning unreachable
169
+ Cloudflare edge IPs. Scripts now fail over to a working IP within seconds instead of
170
+ waiting 10-30s per attempt.
171
+ - **TimeoutError handling** — retry loop now catches `TimeoutError` in addition to
172
+ `URLError`, preventing unhandled socket timeouts from crashing scripts.
173
+
174
+ ---
175
+
176
+ ## [0.3.1] — 2026-02-08
177
+
178
+ ### Fixed
179
+ - **`list_issues.py` product scope** — scoping via `activeProjects` and `product.labelIds`
180
+ now applies regardless of `--active` or `--status` flags. Previously, these flags
181
+ bypassed product scope entirely, returning all team issues.
182
+
183
+ ### Added
184
+ - **`build_product_scope()` API helper** — new method on `FlyDocsClient` implements the
185
+ product scope cascade: `activeProjects` → `product.labelIds` → team-wide.
186
+ - **Multiple `activeProjects` support** — `list_issues.py` now uses OR logic when
187
+ multiple active projects are configured (was only using the first one).
188
+ - **Product label AND filtering** — when `product.labelIds` is set and no `activeProjects`
189
+ are configured, issues must have ALL specified labels to be included.
190
+
191
+ ---
192
+
193
+ ## [0.3.0] — 2026-02-08
194
+
195
+ ### Added
196
+ - **`update_issue.py` bulk update script** — set multiple fields (priority, estimate,
197
+ assignee, state, description, comment) in a single API call instead of separate scripts.
198
+ - **`list_issues.py --active` flag** — returns all non-terminal issues (excludes Done,
199
+ Archived, Canceled, Duplicate). Replaces `status_summary.py`.
200
+ - **`list_issues.py` multi-status support** — comma-separated: `--status READY,IMPLEMENTING,BLOCKED`
201
+ - **`get_issue.py --fields` flag** — `basic` skips comment fetch for faster responses,
202
+ `full` includes comments (default).
203
+ - **In-process API caching** — issue ID resolution, team members, and active cycle
204
+ cached within each script invocation to reduce redundant API calls.
205
+
206
+ ### Changed
207
+ - **`transition.py` optimized** — combined state update and cycle assignment into a
208
+ single `issueUpdate` mutation (was two separate calls for IMPLEMENTING transitions).
209
+ - **Session start efficiency** — single `list_issues.py --active` call replaces
210
+ per-status queries. Issues grouped by status in response.
211
+
212
+ ### Removed
213
+ - **`status_summary.py`** — retired from cloud mechanism. Use `list_issues.py --active`
214
+ and group results by the status field instead.
215
+
216
+ ---
217
+
218
+ ## [0.2.1] — 2026-02-07
219
+
220
+ ### Fixed
221
+ - **Commands not fully populating** — changed from additive `cp` to clear-then-copy
222
+ for `.claude/commands/` and `.cursor/commands/` directories.
223
+ - **`docflow-core.mdc` not cleaned up** — added to deprecated cursor rules list.
224
+ - **Config version not set on fresh install** — fresh install path now sets version
225
+ in `config.json`.
226
+ - **Template config version mismatch** — template `config.json` was `0.1.0`, now
227
+ synced with version file.
228
+
229
+ ### Added
230
+ - **`--force` flag** — force update even when versions match.
231
+ - **Old cursor rule directories and commands** added to deprecated cleanup.
232
+
233
+ ---
234
+
235
+ ## [0.2.0] — 2026-02-06
236
+
237
+ ### Added
238
+ - **Scenario-aware setup command** — `/flydocs-setup` rewritten as a comprehensive
239
+ agent prompt handling three scenarios: New Project, DocFlow Migration, FlyDocs Update.
240
+ Includes proactive repo scanning for PRDs and existing documentation.
241
+ - **Changelog and version tracking** — `CHANGELOG.md` included in every install.
242
+ `install.sh --update` now displays what changed between your version and the new one.
243
+ - **Legacy context migration** — `install.sh` safely moves pre-v1.0 separate context
244
+ files (`overview.md`, `stack.md`, `standards.md`) to a `legacy/` folder. The setup
245
+ command reads from legacy, consolidates into `project.md`, and cleans up.
246
+ - **Deprecated file cleanup** — `install.sh --update` detects and offers to remove
247
+ pre-v1.0 artifacts: old skills, rules, hooks, and cursor rules.
248
+
249
+ ### Changed
250
+ - **Version file synced with manifest** — `.flydocs/version` now matches
251
+ `manifest.json` version field (was out of sync in 0.1.0).
252
+
253
+ ### Removed
254
+ - Orphaned hook scripts: `session-end.py`, `linear-auto-approve.py`
255
+
256
+ ---
257
+
258
+ ## [0.1.0] — 2026-01-15
259
+
260
+ ### Added
261
+ - Initial release of FlyDocs Core
262
+ - Workflow skill (`flydocs-workflow`) with full lifecycle stages
263
+ - Mechanism skills: `flydocs-cloud` (Linear API) and `flydocs-local` (file-based)
264
+ - Premium skills: `flydocs-figma`, `flydocs-estimates`
265
+ - Agent definitions: PM, Implementation, Review, Research
266
+ - 16 slash commands for the full development workflow
267
+ - Hook scripts: auto-approve, prefer-scripts, post-edit, prompt-submit
268
+ - Issue templates: feature, bug, chore, idea
269
+ - Community skill suggestions based on detected stack
270
+ - `install.sh` with fresh install and update modes
271
+ - Remote installation via GitHub App token