@autocode-cli/autocode 0.1.15 → 0.1.17
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/README.md +38 -38
- package/dist/cli/commands/comment.d.ts +1 -1
- package/dist/cli/commands/comment.js +11 -11
- package/dist/cli/commands/comment.js.map +1 -1
- package/dist/cli/commands/init.js +1 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/list.d.ts +1 -1
- package/dist/cli/commands/list.d.ts.map +1 -1
- package/dist/cli/commands/list.js +65 -22
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/move.d.ts +1 -1
- package/dist/cli/commands/move.js +12 -12
- package/dist/cli/commands/move.js.map +1 -1
- package/dist/cli/commands/new.d.ts +1 -1
- package/dist/cli/commands/new.d.ts.map +1 -1
- package/dist/cli/commands/new.js +26 -13
- package/dist/cli/commands/new.js.map +1 -1
- package/dist/cli/commands/next.d.ts +1 -1
- package/dist/cli/commands/next.js +15 -15
- package/dist/cli/commands/next.js.map +1 -1
- package/dist/cli/commands/parent.d.ts +9 -0
- package/dist/cli/commands/parent.d.ts.map +1 -0
- package/dist/cli/commands/parent.js +94 -0
- package/dist/cli/commands/parent.js.map +1 -0
- package/dist/cli/commands/serve.js +8 -8
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/show.d.ts +1 -1
- package/dist/cli/commands/show.d.ts.map +1 -1
- package/dist/cli/commands/show.js +51 -31
- package/dist/cli/commands/show.js.map +1 -1
- package/dist/cli/commands/stats.js +2 -2
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/sync.js +3 -3
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/parser.d.ts.map +1 -1
- package/dist/cli/parser.js +5 -3
- package/dist/cli/parser.js.map +1 -1
- package/dist/core/column.js +2 -2
- package/dist/core/column.js.map +1 -1
- package/dist/core/hierarchy.d.ts +97 -0
- package/dist/core/hierarchy.d.ts.map +1 -0
- package/dist/core/hierarchy.js +274 -0
- package/dist/core/hierarchy.js.map +1 -0
- package/dist/core/issue.d.ts +62 -0
- package/dist/core/issue.d.ts.map +1 -0
- package/dist/core/issue.js +247 -0
- package/dist/core/issue.js.map +1 -0
- package/dist/core/sync.d.ts +9 -9
- package/dist/core/sync.d.ts.map +1 -1
- package/dist/core/sync.js +61 -58
- package/dist/core/sync.js.map +1 -1
- package/dist/core/workflow.d.ts +22 -20
- package/dist/core/workflow.d.ts.map +1 -1
- package/dist/core/workflow.js +68 -51
- package/dist/core/workflow.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/server/api-autocomplete.test.d.ts +6 -0
- package/dist/server/api-autocomplete.test.d.ts.map +1 -0
- package/dist/server/api-autocomplete.test.js +249 -0
- package/dist/server/api-autocomplete.test.js.map +1 -0
- package/dist/server/api.d.ts.map +1 -1
- package/dist/server/api.js +216 -106
- package/dist/server/api.js.map +1 -1
- package/dist/server/dashboard/pages/column-prompt.d.ts +1 -1
- package/dist/server/dashboard/pages/column-prompt.d.ts.map +1 -1
- package/dist/server/dashboard/pages/column-prompt.js +11 -11
- package/dist/server/dashboard/pages/column-prompt.js.map +1 -1
- package/dist/server/dashboard/pages/column-terminal.d.ts +1 -1
- package/dist/server/dashboard/pages/column-terminal.d.ts.map +1 -1
- package/dist/server/dashboard/pages/column-terminal.js +14 -14
- package/dist/server/dashboard/pages/column-terminal.js.map +1 -1
- package/dist/server/dashboard/pages/index.d.ts +3 -1
- package/dist/server/dashboard/pages/index.d.ts.map +1 -1
- package/dist/server/dashboard/pages/index.js +3 -1
- package/dist/server/dashboard/pages/index.js.map +1 -1
- package/dist/server/dashboard/pages/issue-graph.d.ts +9 -0
- package/dist/server/dashboard/pages/issue-graph.d.ts.map +1 -0
- package/dist/server/dashboard/pages/issue-graph.js +581 -0
- package/dist/server/dashboard/pages/issue-graph.js.map +1 -0
- package/dist/server/dashboard/pages/issue-view.d.ts +8 -0
- package/dist/server/dashboard/pages/issue-view.d.ts.map +1 -0
- package/dist/server/dashboard/pages/{ticket-view.js → issue-view.js} +128 -128
- package/dist/server/dashboard/pages/issue-view.js.map +1 -0
- package/dist/server/dashboard/pages/main-dashboard.js +21 -21
- package/dist/server/dashboard/pages/main-dashboard.js.map +1 -1
- package/dist/server/dashboard/pages/new-issue.d.ts +8 -0
- package/dist/server/dashboard/pages/new-issue.d.ts.map +1 -0
- package/dist/server/dashboard/pages/new-issue.js +648 -0
- package/dist/server/dashboard/pages/new-issue.js.map +1 -0
- package/dist/server/dashboard/pages/new-issue.test.d.ts +6 -0
- package/dist/server/dashboard/pages/new-issue.test.d.ts.map +1 -0
- package/dist/server/dashboard/pages/new-issue.test.js +349 -0
- package/dist/server/dashboard/pages/new-issue.test.js.map +1 -0
- package/dist/server/dashboard/pages/pipeline-configurator.js +1 -1
- package/dist/server/dashboard/pages/shared.d.ts +2 -2
- package/dist/server/dashboard/pages/shared.d.ts.map +1 -1
- package/dist/server/dashboard/pages/shared.js +5 -5
- package/dist/server/dashboard/pages/shared.js.map +1 -1
- package/dist/server/dashboard/pages/stats-page.js +11 -11
- package/dist/server/dashboard/scripts/index.js +134 -134
- package/dist/server/dashboard/styles/board.d.ts +1 -1
- package/dist/server/dashboard/styles/board.js +10 -10
- package/dist/server/dashboard.d.ts +1 -1
- package/dist/server/dashboard.d.ts.map +1 -1
- package/dist/server/dashboard.js +1 -1
- package/dist/server/dashboard.js.map +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +40 -24
- package/dist/server/index.js.map +1 -1
- package/dist/server/websocket.d.ts +6 -6
- package/dist/server/websocket.d.ts.map +1 -1
- package/dist/server/websocket.js +10 -10
- package/dist/server/websocket.js.map +1 -1
- package/dist/services/claude.d.ts +13 -13
- package/dist/services/claude.d.ts.map +1 -1
- package/dist/services/claude.js +98 -98
- package/dist/services/claude.js.map +1 -1
- package/dist/services/issue-io.d.ts +81 -0
- package/dist/services/issue-io.d.ts.map +1 -0
- package/dist/services/{ticket-io.js → issue-io.js} +54 -53
- package/dist/services/issue-io.js.map +1 -0
- package/dist/services/stats.d.ts +2 -0
- package/dist/services/stats.d.ts.map +1 -1
- package/dist/services/stats.js.map +1 -1
- package/dist/types/index.d.ts +6 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/fs.d.ts +2 -2
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +2 -2
- package/dist/utils/fs.js.map +1 -1
- package/package.json +3 -3
- package/templates/catalog.yaml +2 -2
- package/templates/prompts/api-endpoints-test.en.md +2 -2
- package/templates/prompts/api-endpoints-test.fr.md +2 -2
- package/templates/prompts/backlog.en.md +6 -6
- package/templates/prompts/backlog.fr.md +1 -1
- package/templates/prompts/changelog.en.md +6 -6
- package/templates/prompts/changelog.fr.md +3 -3
- package/templates/prompts/dashboard-responsive.en.md +1 -1
- package/templates/prompts/deploy-prod.en.md +3 -3
- package/templates/prompts/deploy-prod.fr.md +3 -3
- package/templates/prompts/deploy-staging.en.md +3 -3
- package/templates/prompts/deploy-staging.fr.md +3 -3
- package/templates/prompts/design.en.md +5 -5
- package/templates/prompts/design.fr.md +3 -3
- package/templates/prompts/dev.en.md +4 -4
- package/templates/prompts/dev.fr.md +3 -3
- package/templates/prompts/done.en.md +5 -5
- package/templates/prompts/done.fr.md +2 -2
- package/templates/prompts/error-handling-review.en.md +1 -1
- package/templates/prompts/error-handling-review.fr.md +1 -1
- package/templates/prompts/file-watcher-test.en.md +4 -4
- package/templates/prompts/file-watcher-test.fr.md +1 -1
- package/templates/prompts/git-commit.en.md +5 -5
- package/templates/prompts/git-commit.fr.md +3 -3
- package/templates/prompts/git-push.en.md +3 -3
- package/templates/prompts/git-push.fr.md +3 -3
- package/templates/prompts/git-tag.en.md +3 -3
- package/templates/prompts/git-tag.fr.md +3 -3
- package/templates/prompts/in-progress.en.md +6 -6
- package/templates/prompts/in-progress.fr.md +3 -3
- package/templates/prompts/qualification.en.md +8 -8
- package/templates/prompts/qualification.fr.md +3 -3
- package/templates/prompts/retest-cypress.en.md +3 -3
- package/templates/prompts/retest-cypress.fr.md +3 -3
- package/templates/prompts/retest-playwright.en.md +4 -4
- package/templates/prompts/retest-playwright.fr.md +3 -3
- package/templates/prompts/retest.en.md +4 -4
- package/templates/prompts/retest.fr.md +3 -3
- package/templates/prompts/review-best-practices.en.md +3 -3
- package/templates/prompts/review-best-practices.fr.md +3 -3
- package/templates/prompts/review-code.en.md +4 -4
- package/templates/prompts/review-code.fr.md +3 -3
- package/templates/prompts/review-consistency.en.md +3 -3
- package/templates/prompts/review-consistency.fr.md +3 -3
- package/templates/prompts/review-no-duplication.en.md +3 -3
- package/templates/prompts/review-no-duplication.fr.md +3 -3
- package/templates/prompts/review-security.en.md +4 -4
- package/templates/prompts/review-security.fr.md +3 -3
- package/templates/prompts/specification.en.md +5 -5
- package/templates/prompts/specification.fr.md +3 -3
- package/templates/prompts/splitter.en.md +13 -13
- package/templates/prompts/splitter.fr.md +3 -3
- package/templates/prompts/template-validation.en.md +1 -1
- package/templates/prompts/template-validation.fr.md +1 -1
- package/templates/prompts/testing-coverage.en.md +1 -1
- package/templates/prompts/testing-coverage.fr.md +1 -1
- package/templates/prompts/testing-cypress.en.md +4 -4
- package/templates/prompts/testing-cypress.fr.md +3 -3
- package/templates/prompts/testing-integration.en.md +4 -4
- package/templates/prompts/testing-integration.fr.md +3 -3
- package/templates/prompts/testing-playwright.en.md +4 -4
- package/templates/prompts/testing-playwright.fr.md +3 -3
- package/templates/prompts/testing-unit.en.md +4 -4
- package/templates/prompts/testing-unit.fr.md +3 -3
- package/templates/prompts/update-docs.en.md +3 -3
- package/templates/prompts/update-docs.fr.md +3 -3
- package/templates/prompts/validate-staging.en.md +3 -3
- package/templates/prompts/validate-staging.fr.md +3 -3
- package/templates/prompts/websocket-test.en.md +1 -1
- package/dist/core/ticket.d.ts +0 -50
- package/dist/core/ticket.d.ts.map +0 -1
- package/dist/core/ticket.js +0 -224
- package/dist/core/ticket.js.map +0 -1
- package/dist/server/dashboard/pages/ticket-view.d.ts +0 -8
- package/dist/server/dashboard/pages/ticket-view.d.ts.map +0 -1
- package/dist/server/dashboard/pages/ticket-view.js.map +0 -1
- package/dist/services/ticket-io.d.ts +0 -80
- package/dist/services/ticket-io.d.ts.map +0 -1
- package/dist/services/ticket-io.js.map +0 -1
|
@@ -17,10 +17,10 @@ Audit securite. Identifier et corriger les vulnerabilites potentielles (OWASP To
|
|
|
17
17
|
- Legerement hors scope (amelioration mineure, cas limite) : `autocode new "<titre>" "<description>" --priority P2 --labels "<labels>" --acceptance "<criteres>" --semver patch --column ready`
|
|
18
18
|
- Tres hors scope (nouvelle feature, changement majeur) : `autocode new "<titre>" "<description>" --priority P2 --labels "<labels>" --acceptance "<criteres>" --semver patch --column backlog`
|
|
19
19
|
- Dans le scope : traiter directement dans le ticket actuel
|
|
20
|
-
9. Documenter : `autocode comment <
|
|
21
|
-
10. Avancer : `autocode next <
|
|
20
|
+
9. Documenter : `autocode comment <issue-key> "Review security OK"`
|
|
21
|
+
10. Avancer : `autocode next <issue-key>`
|
|
22
22
|
|
|
23
|
-
> Ou retour : `autocode move <
|
|
23
|
+
> Ou retour : `autocode move <issue-key> <target-column-slug>`
|
|
24
24
|
|
|
25
25
|
## Criteres de Validation
|
|
26
26
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Role
|
|
4
4
|
|
|
5
|
-
Write detailed technical specifications for the
|
|
5
|
+
Write detailed technical specifications for the issue. Define the implementation approach clearly.
|
|
6
6
|
|
|
7
7
|
## Actions
|
|
8
8
|
|
|
@@ -15,11 +15,11 @@ Write detailed technical specifications for the ticket. Define the implementatio
|
|
|
15
15
|
7. If out of scope work detected:
|
|
16
16
|
- Slightly out of scope (minor improvement, edge case): `autocode new "<title>" "<description>" --priority P2 --labels "<labels>" --acceptance "<criteria>" --semver patch --column ready`
|
|
17
17
|
- Significantly out of scope (new feature, major change): `autocode new "<title>" "<description>" --priority P2 --labels "<labels>" --acceptance "<criteria>" --semver patch --column backlog`
|
|
18
|
-
- In scope: handle directly in current
|
|
19
|
-
8. Document: `autocode comment <
|
|
20
|
-
9. Advance: `autocode next <
|
|
18
|
+
- In scope: handle directly in current issue
|
|
19
|
+
8. Document: `autocode comment <issue-key> "Specification complete: <technical approach>"`
|
|
20
|
+
9. Advance: `autocode next <issue-key>`
|
|
21
21
|
|
|
22
|
-
> Or return: `autocode move <
|
|
22
|
+
> Or return: `autocode move <issue-key> <target-column-slug>`
|
|
23
23
|
|
|
24
24
|
## Validation Criteria
|
|
25
25
|
|
|
@@ -16,10 +16,10 @@ Rediger les specifications techniques detaillees pour le ticket. Definir clairem
|
|
|
16
16
|
- Legerement hors scope (amelioration mineure, cas limite) : `autocode new "<titre>" "<description>" --priority P2 --labels "<labels>" --acceptance "<criteres>" --semver patch --column ready`
|
|
17
17
|
- Tres hors scope (nouvelle feature, changement majeur) : `autocode new "<titre>" "<description>" --priority P2 --labels "<labels>" --acceptance "<criteres>" --semver patch --column backlog`
|
|
18
18
|
- Dans le scope : traiter directement dans le ticket actuel
|
|
19
|
-
8. Documenter : `autocode comment <
|
|
20
|
-
9. Avancer : `autocode next <
|
|
19
|
+
8. Documenter : `autocode comment <issue-key> "Specification terminee : <approche technique>"`
|
|
20
|
+
9. Avancer : `autocode next <issue-key>`
|
|
21
21
|
|
|
22
|
-
> Ou retour : `autocode move <
|
|
22
|
+
> Ou retour : `autocode move <issue-key> <target-column-slug>`
|
|
23
23
|
|
|
24
24
|
## Criteres de Validation
|
|
25
25
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Role
|
|
4
4
|
|
|
5
|
-
Break down large requirements into smaller, focused
|
|
5
|
+
Break down large requirements into smaller, focused issues **when needed** to limit responsibility and improve traceability. Create atomic tasks that can be independently implemented and verified.
|
|
6
6
|
|
|
7
7
|
## When to Split
|
|
8
8
|
|
|
@@ -16,23 +16,23 @@ If the task is small enough to be completed in one go, proceed directly without
|
|
|
16
16
|
|
|
17
17
|
1. Analyze the requirement to identify distinct functional components
|
|
18
18
|
2. Identify natural boundaries between features, layers, or responsibilities
|
|
19
|
-
3. Define clear acceptance criteria for each sub-
|
|
20
|
-
4. Ensure each split
|
|
21
|
-
5. Create sub-
|
|
22
|
-
6. Verify no functionality has been forgotten or duplicated across
|
|
23
|
-
7. Create an integration
|
|
24
|
-
8. Document: `autocode comment <
|
|
25
|
-
9. Advance: `autocode next <
|
|
19
|
+
3. Define clear acceptance criteria for each sub-issue
|
|
20
|
+
4. Ensure each split issue is independently testable and deployable
|
|
21
|
+
5. Create sub-issues: `autocode new "<title>" "<description>" --priority P2 --labels "<labels>" --acceptance "<criteria>" --semver patch --column backlog`
|
|
22
|
+
6. Verify no functionality has been forgotten or duplicated across issues
|
|
23
|
+
7. Create an integration issue that references all sub-issues to validate cohesion
|
|
24
|
+
8. Document: `autocode comment <issue-key> "[summary]"`
|
|
25
|
+
9. Advance: `autocode next <issue-key>`
|
|
26
26
|
|
|
27
|
-
> Or return: `autocode move <
|
|
27
|
+
> Or return: `autocode move <issue-key> <target-column-slug>`
|
|
28
28
|
|
|
29
29
|
## Validation Criteria
|
|
30
30
|
|
|
31
|
-
- [ ] All sub-
|
|
31
|
+
- [ ] All sub-issues are atomic and independently implementable
|
|
32
32
|
- [ ] No functionality from the original requirement has been forgotten
|
|
33
|
-
- [ ] An integration
|
|
34
|
-
- [ ] Each sub-
|
|
33
|
+
- [ ] An integration issue exists to verify all parts work together cohesively
|
|
34
|
+
- [ ] Each sub-issue has clear acceptance criteria
|
|
35
35
|
|
|
36
36
|
## Notes
|
|
37
37
|
|
|
38
|
-
Smaller
|
|
38
|
+
Smaller issues reduce cognitive load and merge conflicts. Always create an integration issue to ensure the split parts form a coherent whole.
|
|
@@ -21,10 +21,10 @@ Si la tâche est suffisamment petite pour être complétée en une fois, procéd
|
|
|
21
21
|
5. Créer les sous-tickets : `autocode new "<title>" "<description>" --priority P2 --labels "<labels>" --acceptance "<criteria>" --semver patch --column backlog`
|
|
22
22
|
6. Vérifier qu'aucune fonctionnalité n'a été oubliée ou dupliquée entre les tickets
|
|
23
23
|
7. Créer un ticket d'intégration qui référence tous les sous-tickets pour valider la cohésion
|
|
24
|
-
8. Documenter : `autocode comment <
|
|
25
|
-
9. Avancer : `autocode next <
|
|
24
|
+
8. Documenter : `autocode comment <issue-key> "[résumé]"`
|
|
25
|
+
9. Avancer : `autocode next <issue-key>`
|
|
26
26
|
|
|
27
|
-
> Ou retourner : `autocode move <
|
|
27
|
+
> Ou retourner : `autocode move <issue-key> <target-column-slug>`
|
|
28
28
|
|
|
29
29
|
## Critères de Validation
|
|
30
30
|
|
|
@@ -11,7 +11,7 @@ Verify project templates are correct and functional.
|
|
|
11
11
|
- Test generation with `autocode init`
|
|
12
12
|
3. Verify generated structure:
|
|
13
13
|
- .autocode/
|
|
14
|
-
- .autocode/
|
|
14
|
+
- .autocode/issues/
|
|
15
15
|
- .autocode/config.yml
|
|
16
16
|
- pipeline.yml
|
|
17
17
|
4. Test different configurations
|
|
@@ -11,7 +11,7 @@ Vérifier que les templates de projet sont corrects et fonctionnels.
|
|
|
11
11
|
- Tester la génération avec `autocode init`
|
|
12
12
|
3. Vérifier la structure générée:
|
|
13
13
|
- .autocode/
|
|
14
|
-
- .autocode/
|
|
14
|
+
- .autocode/issues/
|
|
15
15
|
- .autocode/config.yml
|
|
16
16
|
- pipeline.yml
|
|
17
17
|
4. Tester différentes configurations
|
|
@@ -8,7 +8,7 @@ Measure and validate code coverage by unit tests.
|
|
|
8
8
|
2. Analyze generated coverage report
|
|
9
9
|
3. Identify files with insufficient coverage (<80%)
|
|
10
10
|
4. Check coverage of critical modules:
|
|
11
|
-
- src/core/ (
|
|
11
|
+
- src/core/ (issue.ts, column.ts, workflow.ts)
|
|
12
12
|
- src/server/api.ts
|
|
13
13
|
- src/services/
|
|
14
14
|
5. Add tests for uncovered areas if needed
|
|
@@ -8,7 +8,7 @@ Mesurer et valider la couverture de code par les tests unitaires.
|
|
|
8
8
|
2. Analyser le rapport de couverture généré
|
|
9
9
|
3. Identifier les fichiers avec couverture insuffisante (<80%)
|
|
10
10
|
4. Vérifier la couverture des modules critiques:
|
|
11
|
-
- src/core/ (
|
|
11
|
+
- src/core/ (issue.ts, column.ts, workflow.ts)
|
|
12
12
|
- src/server/api.ts
|
|
13
13
|
- src/services/
|
|
14
14
|
5. Ajouter des tests pour les zones non couvertes si nécessaire
|
|
@@ -12,11 +12,11 @@ Write AND execute E2E automated tests to prevent regressions.
|
|
|
12
12
|
4. Describe tests clearly (describe/it)
|
|
13
13
|
5. Execute tests: npx cypress run
|
|
14
14
|
6. If failures: fix tests or code
|
|
15
|
-
7. Do not write tests for code outside the
|
|
16
|
-
8. Document: `autocode comment <
|
|
17
|
-
9. Advance: `autocode next <
|
|
15
|
+
7. Do not write tests for code outside the issue scope
|
|
16
|
+
8. Document: `autocode comment <issue-key> "Cypress tests OK"`
|
|
17
|
+
9. Advance: `autocode next <issue-key>`
|
|
18
18
|
|
|
19
|
-
> Or return: `autocode move <
|
|
19
|
+
> Or return: `autocode move <issue-key> <target-column-slug>`
|
|
20
20
|
|
|
21
21
|
## Validation Criteria
|
|
22
22
|
|
|
@@ -13,10 +13,10 @@ Rediger ET executer des tests E2E automatises pour prevenir les regressions.
|
|
|
13
13
|
5. Executer les tests : npx cypress run
|
|
14
14
|
6. Si echecs : corriger les tests ou le code
|
|
15
15
|
7. Ne pas ecrire de tests pour du code hors scope du ticket
|
|
16
|
-
8. Documenter : `autocode comment <
|
|
17
|
-
9. Avancer : `autocode next <
|
|
16
|
+
8. Documenter : `autocode comment <issue-key> "Tests Cypress OK"`
|
|
17
|
+
9. Avancer : `autocode next <issue-key>`
|
|
18
18
|
|
|
19
|
-
> Ou retour : `autocode move <
|
|
19
|
+
> Ou retour : `autocode move <issue-key> <target-column-slug>`
|
|
20
20
|
|
|
21
21
|
## Criteres de Validation
|
|
22
22
|
|
|
@@ -13,11 +13,11 @@ Run integration tests to verify components work correctly together. Ensure syste
|
|
|
13
13
|
5. Test database operations
|
|
14
14
|
6. Test external service connections
|
|
15
15
|
7. Fix any failing tests
|
|
16
|
-
8. Do not write tests for code outside the
|
|
17
|
-
9. Document: `autocode comment <
|
|
18
|
-
10. Advance: `autocode next <
|
|
16
|
+
8. Do not write tests for code outside the issue scope
|
|
17
|
+
9. Document: `autocode comment <issue-key> "Integration tests passed"`
|
|
18
|
+
10. Advance: `autocode next <issue-key>`
|
|
19
19
|
|
|
20
|
-
> Or return: `autocode move <
|
|
20
|
+
> Or return: `autocode move <issue-key> <target-column-slug>`
|
|
21
21
|
|
|
22
22
|
## Validation Criteria
|
|
23
23
|
|
|
@@ -14,10 +14,10 @@ Executer les tests d'integration pour verifier que les composants fonctionnent c
|
|
|
14
14
|
6. Tester les connexions aux services externes
|
|
15
15
|
7. Corriger les tests en echec
|
|
16
16
|
8. Ne pas ecrire de tests pour du code hors scope du ticket
|
|
17
|
-
9. Documenter : `autocode comment <
|
|
18
|
-
10. Avancer : `autocode next <
|
|
17
|
+
9. Documenter : `autocode comment <issue-key> "Tests d'integration OK"`
|
|
18
|
+
10. Avancer : `autocode next <issue-key>`
|
|
19
19
|
|
|
20
|
-
> Ou retour : `autocode move <
|
|
20
|
+
> Ou retour : `autocode move <issue-key> <target-column-slug>`
|
|
21
21
|
|
|
22
22
|
## Criteres de Validation
|
|
23
23
|
|
|
@@ -12,11 +12,11 @@ Live functional testing with Playwright. Manually verify feature works by naviga
|
|
|
12
12
|
4. Test edge cases
|
|
13
13
|
5. Verify error handling
|
|
14
14
|
6. Capture screenshots if needed
|
|
15
|
-
7. Do not test functionality outside the
|
|
16
|
-
8. Document: `autocode comment <
|
|
17
|
-
9. Advance: `autocode next <
|
|
15
|
+
7. Do not test functionality outside the issue scope
|
|
16
|
+
8. Document: `autocode comment <issue-key> "Playwright tests OK"`
|
|
17
|
+
9. Advance: `autocode next <issue-key>`
|
|
18
18
|
|
|
19
|
-
> Or return: `autocode move <
|
|
19
|
+
> Or return: `autocode move <issue-key> <target-column-slug>`
|
|
20
20
|
|
|
21
21
|
## Validation Criteria
|
|
22
22
|
|
|
@@ -13,10 +13,10 @@ Test fonctionnel live avec Playwright. Verifier manuellement que la feature fonc
|
|
|
13
13
|
5. Verifier la gestion d'erreurs
|
|
14
14
|
6. Capturer des screenshots si necessaire
|
|
15
15
|
7. Ne pas tester de fonctionnalites hors scope du ticket
|
|
16
|
-
8. Documenter : `autocode comment <
|
|
17
|
-
9. Avancer : `autocode next <
|
|
16
|
+
8. Documenter : `autocode comment <issue-key> "Tests Playwright OK"`
|
|
17
|
+
9. Avancer : `autocode next <issue-key>`
|
|
18
18
|
|
|
19
|
-
> Ou retour : `autocode move <
|
|
19
|
+
> Ou retour : `autocode move <issue-key> <target-column-slug>`
|
|
20
20
|
|
|
21
21
|
## Criteres de Validation
|
|
22
22
|
|
|
@@ -13,11 +13,11 @@ Write and run unit tests for the implemented feature. Ensure code coverage and r
|
|
|
13
13
|
5. Run all unit tests: `npm test` or equivalent
|
|
14
14
|
6. Fix any failing tests
|
|
15
15
|
7. Verify coverage meets project standards
|
|
16
|
-
8. Do not write tests for code outside the
|
|
17
|
-
9. Document: `autocode comment <
|
|
18
|
-
10. Advance: `autocode next <
|
|
16
|
+
8. Do not write tests for code outside the issue scope
|
|
17
|
+
9. Document: `autocode comment <issue-key> "Unit tests passed: <coverage>%"`
|
|
18
|
+
10. Advance: `autocode next <issue-key>`
|
|
19
19
|
|
|
20
|
-
> Or return: `autocode move <
|
|
20
|
+
> Or return: `autocode move <issue-key> <target-column-slug>`
|
|
21
21
|
|
|
22
22
|
## Validation Criteria
|
|
23
23
|
|
|
@@ -14,10 +14,10 @@ Ecrire et executer les tests unitaires pour la fonctionnalite implementee. Assur
|
|
|
14
14
|
6. Corriger les tests en echec
|
|
15
15
|
7. Verifier que la couverture respecte les standards du projet
|
|
16
16
|
8. Ne pas ecrire de tests pour du code hors scope du ticket
|
|
17
|
-
9. Documenter : `autocode comment <
|
|
18
|
-
10. Avancer : `autocode next <
|
|
17
|
+
9. Documenter : `autocode comment <issue-key> "Tests unitaires OK : <couverture>%"`
|
|
18
|
+
10. Avancer : `autocode next <issue-key>`
|
|
19
19
|
|
|
20
|
-
> Ou retour : `autocode move <
|
|
20
|
+
> Ou retour : `autocode move <issue-key> <target-column-slug>`
|
|
21
21
|
|
|
22
22
|
## Criteres de Validation
|
|
23
23
|
|
|
@@ -11,10 +11,10 @@ Document changes for future developers and users.
|
|
|
11
11
|
3. Document new features
|
|
12
12
|
4. Update existing guides if impacted
|
|
13
13
|
5. Verify doc consistency
|
|
14
|
-
6. Document: `autocode comment <
|
|
15
|
-
7. Advance: `autocode next <
|
|
14
|
+
6. Document: `autocode comment <issue-key> "Documentation updated"`
|
|
15
|
+
7. Advance: `autocode next <issue-key>`
|
|
16
16
|
|
|
17
|
-
> Or return: `autocode move <
|
|
17
|
+
> Or return: `autocode move <issue-key> <target-column-slug>`
|
|
18
18
|
|
|
19
19
|
## Validation Criteria
|
|
20
20
|
|
|
@@ -11,10 +11,10 @@ Documenter les changements pour les futurs developpeurs et utilisateurs.
|
|
|
11
11
|
3. Documenter les nouvelles features
|
|
12
12
|
4. Mettre a jour les guides existants si impactes
|
|
13
13
|
5. Verifier la coherence de la doc
|
|
14
|
-
6. Documenter : `autocode comment <
|
|
15
|
-
7. Avancer : `autocode next <
|
|
14
|
+
6. Documenter : `autocode comment <issue-key> "Documentation mise a jour"`
|
|
15
|
+
7. Avancer : `autocode next <issue-key>`
|
|
16
16
|
|
|
17
|
-
> Ou retour : `autocode move <
|
|
17
|
+
> Ou retour : `autocode move <issue-key> <target-column-slug>`
|
|
18
18
|
|
|
19
19
|
## Criteres de Validation
|
|
20
20
|
|
|
@@ -12,10 +12,10 @@ Final validation: verify everything works in staging AND git repo is clean.
|
|
|
12
12
|
4. Verify visually everything is OK
|
|
13
13
|
5. Capture proof (screenshot)
|
|
14
14
|
6. Confirm feature works
|
|
15
|
-
7. Document: `autocode comment <
|
|
16
|
-
8. Advance: `autocode next <
|
|
15
|
+
7. Document: `autocode comment <issue-key> "Staging validation OK"`
|
|
16
|
+
8. Advance: `autocode next <issue-key>`
|
|
17
17
|
|
|
18
|
-
> Or return: `autocode move <
|
|
18
|
+
> Or return: `autocode move <issue-key> <target-column-slug>`
|
|
19
19
|
|
|
20
20
|
## Validation Criteria
|
|
21
21
|
|
|
@@ -12,10 +12,10 @@ Validation finale : verifier que tout fonctionne en staging ET que le repo git e
|
|
|
12
12
|
4. Verifier visuellement que tout est OK
|
|
13
13
|
5. Capturer une preuve (screenshot)
|
|
14
14
|
6. Confirmer que la feature fonctionne
|
|
15
|
-
7. Documenter : `autocode comment <
|
|
16
|
-
8. Avancer : `autocode next <
|
|
15
|
+
7. Documenter : `autocode comment <issue-key> "Validation staging OK"`
|
|
16
|
+
8. Avancer : `autocode next <issue-key>`
|
|
17
17
|
|
|
18
|
-
> Ou retour : `autocode move <
|
|
18
|
+
> Ou retour : `autocode move <issue-key> <target-column-slug>`
|
|
19
19
|
|
|
20
20
|
## Criteres de Validation
|
|
21
21
|
|
|
@@ -7,7 +7,7 @@ Verify WebSocket connection works for real-time updates.
|
|
|
7
7
|
1. Start server with WebSocket enabled
|
|
8
8
|
2. Connect to WebSocket: `ws://localhost:3456/ws`
|
|
9
9
|
3. Verify connection message received
|
|
10
|
-
4. Create/modify
|
|
10
|
+
4. Create/modify an issue via API
|
|
11
11
|
5. Verify event received via WebSocket
|
|
12
12
|
6. Test automatic reconnection
|
|
13
13
|
7. Check performance with multiple clients
|
package/dist/core/ticket.d.ts
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ticket CRUD operations - Multi-file structure
|
|
3
|
-
*/
|
|
4
|
-
import type { Ticket, TicketCreateInput, TicketUpdateInput } from '../types/index.js';
|
|
5
|
-
/**
|
|
6
|
-
* Find a ticket directory by its key
|
|
7
|
-
*/
|
|
8
|
-
export declare function findTicketDir(rootDir: string, key: string): string | null;
|
|
9
|
-
/**
|
|
10
|
-
* Find a ticket path by its key (for backwards compatibility)
|
|
11
|
-
* @deprecated Use findTicketDir instead
|
|
12
|
-
*/
|
|
13
|
-
export declare function findTicketPath(rootDir: string, key: string): string | null;
|
|
14
|
-
/**
|
|
15
|
-
* Get a ticket by its key
|
|
16
|
-
*/
|
|
17
|
-
export declare function getTicket(rootDir: string, key: string): Ticket | null;
|
|
18
|
-
/**
|
|
19
|
-
* Create a new ticket
|
|
20
|
-
*/
|
|
21
|
-
export declare function createTicket(rootDir: string, input: TicketCreateInput): Ticket;
|
|
22
|
-
/**
|
|
23
|
-
* Update a ticket
|
|
24
|
-
*/
|
|
25
|
-
export declare function updateTicket(rootDir: string, key: string, updates: TicketUpdateInput): Ticket | null;
|
|
26
|
-
/**
|
|
27
|
-
* Add a comment to a ticket
|
|
28
|
-
*/
|
|
29
|
-
export declare function addComment(rootDir: string, key: string, text: string, column?: string, source?: 'user' | 'claude'): Ticket | null;
|
|
30
|
-
/**
|
|
31
|
-
* Move a ticket to a new column
|
|
32
|
-
*/
|
|
33
|
-
export declare function moveTicket(rootDir: string, key: string, toColumnSlug: string, force?: boolean): Ticket | null;
|
|
34
|
-
/**
|
|
35
|
-
* Move a ticket to the next column
|
|
36
|
-
*/
|
|
37
|
-
export declare function nextTicket(rootDir: string, key: string): Ticket | null;
|
|
38
|
-
/**
|
|
39
|
-
* List all tickets
|
|
40
|
-
*/
|
|
41
|
-
export declare function listTickets(rootDir: string): Ticket[];
|
|
42
|
-
/**
|
|
43
|
-
* List tickets in a specific column
|
|
44
|
-
*/
|
|
45
|
-
export declare function listTicketsInColumn(rootDir: string, columnSlug: string): Ticket[];
|
|
46
|
-
/**
|
|
47
|
-
* Find the first actionable ticket (for Claude processing)
|
|
48
|
-
*/
|
|
49
|
-
export declare function findActionableTicket(rootDir: string): Ticket | null;
|
|
50
|
-
//# sourceMappingURL=ticket.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ticket.d.ts","sourceRoot":"","sources":["../../src/core/ticket.ts"],"names":[],"mappings":"AAAA;;GAEG;AAuBH,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAY,MAAM,mBAAmB,CAAC;AAEhG;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBzE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI1E;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKrE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAiC9E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,CA0BpG;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,GAAG,QAAiB,GAAG,MAAM,GAAG,IAAI,CAWzI;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,KAAK,UAAQ,GACZ,MAAM,GAAG,IAAI,CA6Bf;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWtE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBrD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAgBjF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBnE"}
|
package/dist/core/ticket.js
DELETED
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ticket CRUD operations - Multi-file structure
|
|
3
|
-
*/
|
|
4
|
-
import { join, dirname, basename } from 'node:path';
|
|
5
|
-
import { ensureDir, listDirs, pathExists, generateTicketKey, slugify, getTimestamp, moveDir, } from '../utils/fs.js';
|
|
6
|
-
import { loadTicket, updateMetadata, updateDescription, addCommentFile, addHistoryEntry, createTicketStructure, } from '../services/ticket-io.js';
|
|
7
|
-
import { getColumns, getColumnBySlug } from './column.js';
|
|
8
|
-
/**
|
|
9
|
-
* Find a ticket directory by its key
|
|
10
|
-
*/
|
|
11
|
-
export function findTicketDir(rootDir, key) {
|
|
12
|
-
const columns = getColumns();
|
|
13
|
-
for (const column of columns) {
|
|
14
|
-
const ticketsDir = join(rootDir, column.slug, 'tickets');
|
|
15
|
-
if (!pathExists(ticketsDir))
|
|
16
|
-
continue;
|
|
17
|
-
const ticketDirs = listDirs(ticketsDir);
|
|
18
|
-
for (const ticketDir of ticketDirs) {
|
|
19
|
-
if (ticketDir.startsWith(`${key}__`)) {
|
|
20
|
-
return join(ticketsDir, ticketDir);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Find a ticket path by its key (for backwards compatibility)
|
|
28
|
-
* @deprecated Use findTicketDir instead
|
|
29
|
-
*/
|
|
30
|
-
export function findTicketPath(rootDir, key) {
|
|
31
|
-
const ticketDir = findTicketDir(rootDir, key);
|
|
32
|
-
if (!ticketDir)
|
|
33
|
-
return null;
|
|
34
|
-
return join(ticketDir, 'metadata.json');
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Get a ticket by its key
|
|
38
|
-
*/
|
|
39
|
-
export function getTicket(rootDir, key) {
|
|
40
|
-
const ticketDir = findTicketDir(rootDir, key);
|
|
41
|
-
if (!ticketDir)
|
|
42
|
-
return null;
|
|
43
|
-
return loadTicket(ticketDir);
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Create a new ticket
|
|
47
|
-
*/
|
|
48
|
-
export function createTicket(rootDir, input) {
|
|
49
|
-
const key = generateTicketKey(rootDir);
|
|
50
|
-
const timestamp = getTimestamp();
|
|
51
|
-
const titleSlug = slugify(input.title);
|
|
52
|
-
// Default to backlog
|
|
53
|
-
const column = getColumnBySlug('00_backlog');
|
|
54
|
-
const ticketDir = join(rootDir, column.slug, 'tickets', `${key}__${titleSlug}`);
|
|
55
|
-
const metadata = {
|
|
56
|
-
key,
|
|
57
|
-
title: input.title,
|
|
58
|
-
priority: input.priority || 'P2',
|
|
59
|
-
labels: input.labels || [],
|
|
60
|
-
acceptance_criteria: input.acceptance_criteria || [],
|
|
61
|
-
semver: input.semver || 'patch',
|
|
62
|
-
history: [
|
|
63
|
-
{
|
|
64
|
-
at: timestamp,
|
|
65
|
-
action: 'created',
|
|
66
|
-
from: null,
|
|
67
|
-
to: column.slug,
|
|
68
|
-
},
|
|
69
|
-
],
|
|
70
|
-
created_at: timestamp,
|
|
71
|
-
updated_at: timestamp,
|
|
72
|
-
};
|
|
73
|
-
const description = input.description || '';
|
|
74
|
-
createTicketStructure(ticketDir, metadata, description);
|
|
75
|
-
return loadTicket(ticketDir);
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Update a ticket
|
|
79
|
-
*/
|
|
80
|
-
export function updateTicket(rootDir, key, updates) {
|
|
81
|
-
const ticketDir = findTicketDir(rootDir, key);
|
|
82
|
-
if (!ticketDir)
|
|
83
|
-
return null;
|
|
84
|
-
const ticket = loadTicket(ticketDir);
|
|
85
|
-
if (!ticket)
|
|
86
|
-
return null;
|
|
87
|
-
// Build metadata updates
|
|
88
|
-
const metadataUpdates = {};
|
|
89
|
-
if (updates.title !== undefined)
|
|
90
|
-
metadataUpdates.title = updates.title;
|
|
91
|
-
if (updates.priority !== undefined)
|
|
92
|
-
metadataUpdates.priority = updates.priority;
|
|
93
|
-
if (updates.labels !== undefined)
|
|
94
|
-
metadataUpdates.labels = updates.labels;
|
|
95
|
-
if (updates.acceptance_criteria !== undefined)
|
|
96
|
-
metadataUpdates.acceptance_criteria = updates.acceptance_criteria;
|
|
97
|
-
if (updates.semver !== undefined)
|
|
98
|
-
metadataUpdates.semver = updates.semver;
|
|
99
|
-
// Update metadata if any changes
|
|
100
|
-
if (Object.keys(metadataUpdates).length > 0) {
|
|
101
|
-
updateMetadata(ticketDir, metadataUpdates);
|
|
102
|
-
}
|
|
103
|
-
// Update description if changed
|
|
104
|
-
if (updates.description !== undefined) {
|
|
105
|
-
updateDescription(ticketDir, updates.description);
|
|
106
|
-
}
|
|
107
|
-
return loadTicket(ticketDir);
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Add a comment to a ticket
|
|
111
|
-
*/
|
|
112
|
-
export function addComment(rootDir, key, text, column, source = 'user') {
|
|
113
|
-
const ticketDir = findTicketDir(rootDir, key);
|
|
114
|
-
if (!ticketDir)
|
|
115
|
-
return null;
|
|
116
|
-
const ticket = loadTicket(ticketDir);
|
|
117
|
-
if (!ticket)
|
|
118
|
-
return null;
|
|
119
|
-
const commentColumn = column || ticket.status || 'N/A';
|
|
120
|
-
addCommentFile(ticketDir, text, commentColumn, source);
|
|
121
|
-
return loadTicket(ticketDir);
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Move a ticket to a new column
|
|
125
|
-
*/
|
|
126
|
-
export function moveTicket(rootDir, key, toColumnSlug, force = false) {
|
|
127
|
-
const ticketDir = findTicketDir(rootDir, key);
|
|
128
|
-
if (!ticketDir)
|
|
129
|
-
return null;
|
|
130
|
-
const ticket = loadTicket(ticketDir);
|
|
131
|
-
if (!ticket)
|
|
132
|
-
return null;
|
|
133
|
-
const toColumn = getColumnBySlug(toColumnSlug);
|
|
134
|
-
if (!toColumn)
|
|
135
|
-
return null;
|
|
136
|
-
const fromColumn = getColumnBySlug(ticket.column_slug);
|
|
137
|
-
if (!fromColumn)
|
|
138
|
-
return null;
|
|
139
|
-
// Determine action
|
|
140
|
-
const action = force ? 'forced' : 'moved';
|
|
141
|
-
// Add history entry
|
|
142
|
-
addHistoryEntry(ticketDir, action, fromColumn.slug, toColumn.slug);
|
|
143
|
-
// Move directory
|
|
144
|
-
const ticketDirName = basename(ticketDir);
|
|
145
|
-
const newTicketDir = join(rootDir, toColumn.slug, 'tickets', ticketDirName);
|
|
146
|
-
if (ticketDir !== newTicketDir) {
|
|
147
|
-
ensureDir(dirname(newTicketDir));
|
|
148
|
-
moveDir(ticketDir, newTicketDir);
|
|
149
|
-
}
|
|
150
|
-
return loadTicket(newTicketDir);
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Move a ticket to the next column
|
|
154
|
-
*/
|
|
155
|
-
export function nextTicket(rootDir, key) {
|
|
156
|
-
const ticket = getTicket(rootDir, key);
|
|
157
|
-
if (!ticket)
|
|
158
|
-
return null;
|
|
159
|
-
const currentColumn = getColumnBySlug(ticket.column_slug);
|
|
160
|
-
if (!currentColumn)
|
|
161
|
-
return null;
|
|
162
|
-
const nextColumn = getColumns().find(c => c.index === currentColumn.index + 1);
|
|
163
|
-
if (!nextColumn)
|
|
164
|
-
return null;
|
|
165
|
-
return moveTicket(rootDir, key, nextColumn.slug);
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* List all tickets
|
|
169
|
-
*/
|
|
170
|
-
export function listTickets(rootDir) {
|
|
171
|
-
const tickets = [];
|
|
172
|
-
const columns = getColumns();
|
|
173
|
-
for (const column of columns) {
|
|
174
|
-
const ticketsDir = join(rootDir, column.slug, 'tickets');
|
|
175
|
-
if (!pathExists(ticketsDir))
|
|
176
|
-
continue;
|
|
177
|
-
const ticketDirs = listDirs(ticketsDir);
|
|
178
|
-
for (const ticketDirName of ticketDirs) {
|
|
179
|
-
const ticketDir = join(ticketsDir, ticketDirName);
|
|
180
|
-
const ticket = loadTicket(ticketDir);
|
|
181
|
-
if (ticket) {
|
|
182
|
-
tickets.push(ticket);
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
return tickets;
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* List tickets in a specific column
|
|
190
|
-
*/
|
|
191
|
-
export function listTicketsInColumn(rootDir, columnSlug) {
|
|
192
|
-
const ticketsDir = join(rootDir, columnSlug, 'tickets');
|
|
193
|
-
if (!pathExists(ticketsDir))
|
|
194
|
-
return [];
|
|
195
|
-
const tickets = [];
|
|
196
|
-
const ticketDirs = listDirs(ticketsDir);
|
|
197
|
-
for (const ticketDirName of ticketDirs) {
|
|
198
|
-
const ticketDir = join(ticketsDir, ticketDirName);
|
|
199
|
-
const ticket = loadTicket(ticketDir);
|
|
200
|
-
if (ticket) {
|
|
201
|
-
tickets.push(ticket);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
return tickets;
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Find the first actionable ticket (for Claude processing)
|
|
208
|
-
*/
|
|
209
|
-
export function findActionableTicket(rootDir) {
|
|
210
|
-
const columns = getColumns();
|
|
211
|
-
// Skip backlog (0) and done (12)
|
|
212
|
-
for (const column of columns.slice(1, -1)) {
|
|
213
|
-
const tickets = listTicketsInColumn(rootDir, column.slug);
|
|
214
|
-
if (tickets.length > 0) {
|
|
215
|
-
// Return highest priority ticket
|
|
216
|
-
return tickets.sort((a, b) => {
|
|
217
|
-
const priorityOrder = { P0: 0, P1: 1, P2: 2, P3: 3 };
|
|
218
|
-
return priorityOrder[a.priority] - priorityOrder[b.priority];
|
|
219
|
-
})[0];
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
return null;
|
|
223
|
-
}
|
|
224
|
-
//# sourceMappingURL=ticket.js.map
|