trackfw 7.6.0 → 8.0.0-rc2

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 (124) hide show
  1. package/README.md +28 -11
  2. package/bin/trackfw.js +81 -0
  3. package/package.json +14 -8
  4. package/bin/trackfw +0 -41
  5. package/src/branch/prune.js +0 -450
  6. package/src/branch/runner.js +0 -153
  7. package/src/changelog/index.js +0 -114
  8. package/src/commands/adr.js +0 -56
  9. package/src/commands/agents.js +0 -3
  10. package/src/commands/audit-surface.js +0 -520
  11. package/src/commands/barrier.js +0 -822
  12. package/src/commands/baseline.js +0 -13
  13. package/src/commands/branch.js +0 -98
  14. package/src/commands/changelog.js +0 -29
  15. package/src/commands/commit.js +0 -66
  16. package/src/commands/configure.js +0 -106
  17. package/src/commands/context.js +0 -215
  18. package/src/commands/discover.js +0 -628
  19. package/src/commands/doctor.js +0 -66
  20. package/src/commands/help.js +0 -358
  21. package/src/commands/identity-wizard.js +0 -258
  22. package/src/commands/index.js +0 -68
  23. package/src/commands/init.js +0 -296
  24. package/src/commands/integrations.js +0 -305
  25. package/src/commands/log.js +0 -31
  26. package/src/commands/metrics.js +0 -242
  27. package/src/commands/note.js +0 -24
  28. package/src/commands/push.js +0 -51
  29. package/src/commands/release.js +0 -47
  30. package/src/commands/req.js +0 -98
  31. package/src/commands/roadmap.js +0 -44
  32. package/src/commands/serve.js +0 -345
  33. package/src/commands/ship.js +0 -58
  34. package/src/commands/skills.js +0 -3
  35. package/src/commands/status.js +0 -12
  36. package/src/commands/sync.js +0 -348
  37. package/src/commands/thirdparty.js +0 -390
  38. package/src/commands/update-harness.js +0 -1002
  39. package/src/commands/update.js +0 -500
  40. package/src/commands/validate.js +0 -57
  41. package/src/commands/version.js +0 -10
  42. package/src/commit/runner.js +0 -352
  43. package/src/config/index.js +0 -457
  44. package/src/forge/adapter.js +0 -189
  45. package/src/forge/resolve.js +0 -191
  46. package/src/generators/adr.js +0 -198
  47. package/src/generators/codex.js +0 -79
  48. package/src/generators/date.js +0 -23
  49. package/src/generators/hooks.js +0 -2414
  50. package/src/generators/init.js +0 -1563
  51. package/src/generators/note.js +0 -154
  52. package/src/generators/req.js +0 -436
  53. package/src/generators/roadmap.js +0 -841
  54. package/src/homedir.js +0 -30
  55. package/src/i18n/index.js +0 -53
  56. package/src/i18n/locales/en-US.json +0 -124
  57. package/src/i18n/locales/es-ES.json +0 -124
  58. package/src/i18n/locales/pt-BR.json +0 -124
  59. package/src/identity/config.js +0 -134
  60. package/src/identity/index.js +0 -19
  61. package/src/identity/preset.js +0 -219
  62. package/src/identity/slug.js +0 -62
  63. package/src/integrations/assets/agents/architect.md +0 -61
  64. package/src/integrations/assets/agents/backend.md +0 -41
  65. package/src/integrations/assets/agents/code-quality.md +0 -48
  66. package/src/integrations/assets/agents/data.md +0 -41
  67. package/src/integrations/assets/agents/dba.md +0 -41
  68. package/src/integrations/assets/agents/frontend.md +0 -41
  69. package/src/integrations/assets/agents/iac.md +0 -46
  70. package/src/integrations/assets/agents/infra.md +0 -43
  71. package/src/integrations/assets/agents/qa.md +0 -41
  72. package/src/integrations/assets/agents/security.md +0 -51
  73. package/src/integrations/assets/agents/tooling.md +0 -47
  74. package/src/integrations/assets/agents/ux.md +0 -48
  75. package/src/integrations/assets/catalog.json +0 -48
  76. package/src/integrations/assets/skills/architecture.md +0 -66
  77. package/src/integrations/assets/skills/backend.md +0 -67
  78. package/src/integrations/assets/skills/code-quality.md +0 -78
  79. package/src/integrations/assets/skills/data.md +0 -75
  80. package/src/integrations/assets/skills/dba.md +0 -77
  81. package/src/integrations/assets/skills/frontend.md +0 -70
  82. package/src/integrations/assets/skills/governance.md +0 -6
  83. package/src/integrations/assets/skills/iac.md +0 -90
  84. package/src/integrations/assets/skills/implement.md +0 -6
  85. package/src/integrations/assets/skills/infra.md +0 -62
  86. package/src/integrations/assets/skills/plan.md +0 -6
  87. package/src/integrations/assets/skills/qa.md +0 -63
  88. package/src/integrations/assets/skills/release.md +0 -6
  89. package/src/integrations/assets/skills/review.md +0 -6
  90. package/src/integrations/assets/skills/security.md +0 -74
  91. package/src/integrations/assets/skills/tooling.md +0 -80
  92. package/src/integrations/assets/skills/ux.md +0 -70
  93. package/src/integrations/catalog.js +0 -58
  94. package/src/integrations/doctor.js +0 -0
  95. package/src/integrations/doctor_remote.js +0 -224
  96. package/src/integrations/index.js +0 -171
  97. package/src/integrations/legacy.js +0 -35
  98. package/src/integrations/manager.js +0 -438
  99. package/src/integrations/register-agent.js +0 -106
  100. package/src/integrations/render.js +0 -563
  101. package/src/integrations/scaffold_doctor.js +0 -395
  102. package/src/lib/fatal-error.js +0 -64
  103. package/src/lib/pathfmt.js +0 -43
  104. package/src/lib/unknown-command.js +0 -82
  105. package/src/lib/update-engine.js +0 -242
  106. package/src/push/runner.js +0 -226
  107. package/src/release/runner.js +0 -474
  108. package/src/serve/api_attention.js +0 -24
  109. package/src/serve/api_board.js +0 -105
  110. package/src/serve/api_chain.js +0 -246
  111. package/src/serve/api_file.js +0 -117
  112. package/src/serve/api_metrics.js +0 -139
  113. package/src/serve/static/app.js +0 -1151
  114. package/src/serve/static/index.html +0 -338
  115. package/src/serve/static/style.css +0 -297
  116. package/src/ship/runner.js +0 -775
  117. package/src/thirdparty/fetch.js +0 -140
  118. package/src/thirdparty/markers.js +0 -207
  119. package/src/thirdparty/provenance.js +0 -114
  120. package/src/thirdparty/quarantine.js +0 -113
  121. package/src/thirdparty/references.js +0 -194
  122. package/src/validator/git-exec.js +0 -72
  123. package/src/validator/index.js +0 -4086
  124. package/src/validator/traceid.js +0 -155
@@ -1,155 +0,0 @@
1
- 'use strict'
2
-
3
- const fs = require('fs')
4
- const path = require('path')
5
-
6
- // ESTADOS reconhecidos para REQs e Roadmaps (baseado na pasta onde o arquivo reside)
7
- const KNOWN_STATES = ['wip', 'backlog', 'analyzing', 'blocked', 'done', 'abandoned']
8
-
9
- // extractFrontmatterField extrai o valor de um campo do frontmatter YAML simples de um arquivo .md.
10
- // Retorna string vazia se o campo não for encontrado ou o arquivo não tiver frontmatter.
11
- function extractFrontmatterField(filePath, fieldName) {
12
- let content
13
- try { content = fs.readFileSync(filePath, 'utf8') } catch (_) { return '' }
14
- if (!content.startsWith('---')) return ''
15
- const end = content.indexOf('\n---', 3)
16
- const block = end > 0 ? content.slice(3, end) : content.slice(3)
17
- for (const line of block.split('\n')) {
18
- const trimmed = line.trim()
19
- const prefix = fieldName + ':'
20
- if (trimmed.startsWith(prefix)) {
21
- return trimmed.slice(prefix.length).trim().replace(/^["']|["']$/g, '')
22
- }
23
- }
24
- return ''
25
- }
26
-
27
- // stateFromPath extrai o estado (wip/backlog/blocked/done/abandoned) a partir do caminho do arquivo.
28
- // Percorre os segmentos de path de trás para frente e retorna o primeiro que for um estado reconhecido.
29
- // Retorna '' se nenhum segmento for reconhecido.
30
- function stateFromPath(filePath) {
31
- const segments = filePath.split(path.sep)
32
- for (let i = segments.length - 2; i >= 0; i--) {
33
- if (KNOWN_STATES.includes(segments[i])) return segments[i]
34
- }
35
- return ''
36
- }
37
-
38
- // walkMd retorna array de caminhos absolutos de todos .md recursivamente dentro de dir.
39
- function walkMd(dir) {
40
- const results = []
41
- function walk(d) {
42
- let entries
43
- try { entries = fs.readdirSync(d) } catch (_) { return }
44
- for (const name of entries) {
45
- const full = path.join(d, name)
46
- try {
47
- if (fs.statSync(full).isDirectory()) { walk(full) }
48
- else if (name.endsWith('.md')) { results.push(full) }
49
- } catch (_) {}
50
- }
51
- }
52
- walk(dir)
53
- return results
54
- }
55
-
56
- // checkTraceIds verifica a consistência bidirecional de req_id entre REQs e Roadmaps.
57
- // Parâmetros:
58
- // reqDir — caminho absoluto ou relativo do diretório de REQs
59
- // roadmapDir — caminho absoluto ou relativo do diretório de Roadmaps
60
- // fieldName — nome do campo de frontmatter que contém o trace ID (ex: 'req_id')
61
- // Retorna array de strings de violation.
62
- function checkTraceIds(reqDir, roadmapDir, fieldName) {
63
- if (!fieldName) return []
64
-
65
- // --- Indexar REQs ---
66
- // reqIndex: Map<traceId, [{file, state}]>
67
- const reqIndex = new Map()
68
- for (const filePath of walkMd(reqDir)) {
69
- const traceId = extractFrontmatterField(filePath, fieldName)
70
- if (!traceId) continue
71
- const state = stateFromPath(filePath)
72
- if (!reqIndex.has(traceId)) reqIndex.set(traceId, [])
73
- reqIndex.get(traceId).push({ file: path.basename(filePath), state })
74
- }
75
-
76
- // --- Indexar Roadmaps ---
77
- // roadmapIndex: Map<traceId, [{file, state}]>
78
- const roadmapIndex = new Map()
79
- for (const filePath of walkMd(roadmapDir)) {
80
- const traceId = extractFrontmatterField(filePath, fieldName)
81
- if (!traceId) continue
82
- const state = stateFromPath(filePath)
83
- if (!roadmapIndex.has(traceId)) roadmapIndex.set(traceId, [])
84
- roadmapIndex.get(traceId).push({ file: path.basename(filePath), state })
85
- }
86
-
87
- // Salvaguarda: trace_id_field configurado mas nenhum arquivo indexado
88
- if (reqIndex.size === 0 && roadmapIndex.size === 0) {
89
- return ['traceid_config_warning: trace_id_field is set but no REQ/Roadmap entries were indexed — check reqDir, roadmapDir and roadmap_namespacing']
90
- }
91
-
92
- const violations = []
93
-
94
- // Salvaguarda one-sided: um lado indexado e o outro não
95
- if (reqIndex.size === 0 && roadmapIndex.size > 0) {
96
- violations.push(`traceid_config_warning: trace_id_field is set but REQs (0) were indexed while Roadmaps (${roadmapIndex.size}) were — check reqDir and roadmap_namespacing`)
97
- }
98
- if (roadmapIndex.size === 0 && reqIndex.size > 0) {
99
- violations.push(`traceid_config_warning: trace_id_field is set but Roadmaps (0) were indexed while REQs (${reqIndex.size}) were — check roadmapDir and roadmap_namespacing`)
100
- }
101
-
102
- // traceid_duplicate_req: mesmo req_id em >1 REQ
103
- for (const [traceId, entries] of reqIndex.entries()) {
104
- if (entries.length > 1) {
105
- const files = entries.map(e => e.file).join(', ')
106
- violations.push(`traceid_duplicate_req: req_id "${traceId}" appears in ${entries.length} REQs: ${files}`)
107
- }
108
- }
109
-
110
- // traceid_duplicate_roadmap: mesmo req_id em >1 Roadmap
111
- for (const [traceId, entries] of roadmapIndex.entries()) {
112
- if (entries.length > 1) {
113
- const files = entries.map(e => e.file).join(', ')
114
- violations.push(`traceid_duplicate_roadmap: req_id "${traceId}" appears in ${entries.length} Roadmaps: ${files}`)
115
- }
116
- }
117
-
118
- // traceid_orphan_roadmap: Roadmap com req_id sem REQ correspondente
119
- for (const [traceId, entries] of roadmapIndex.entries()) {
120
- if (!reqIndex.has(traceId)) {
121
- for (const e of entries) {
122
- violations.push(`traceid_orphan_roadmap: roadmap "${e.file}" has req_id "${traceId}" but no matching REQ`)
123
- }
124
- }
125
- }
126
-
127
- // traceid_orphan_req: REQ com req_id sem Roadmap correspondente
128
- for (const [traceId, entries] of reqIndex.entries()) {
129
- if (!roadmapIndex.has(traceId)) {
130
- for (const e of entries) {
131
- violations.push(`traceid_orphan_req: req "${e.file}" has req_id "${traceId}" but no matching Roadmap`)
132
- }
133
- }
134
- }
135
-
136
- // traceid_state_mismatch: REQ e Roadmap com mesmo req_id em estados diferentes
137
- for (const [traceId, reqEntries] of reqIndex.entries()) {
138
- if (!roadmapIndex.has(traceId)) continue
139
- const roadmapEntries = roadmapIndex.get(traceId)
140
- // Comparar todos os pares (normalmente 1x1, mas suporta duplicados já reportados acima)
141
- for (const req of reqEntries) {
142
- for (const rm of roadmapEntries) {
143
- if (req.state && rm.state && req.state !== rm.state) {
144
- violations.push(
145
- `traceid_state_mismatch: req_id "${traceId}" — REQ "${req.file}" is in "${req.state}" but Roadmap "${rm.file}" is in "${rm.state}"`
146
- )
147
- }
148
- }
149
- }
150
- }
151
-
152
- return violations
153
- }
154
-
155
- module.exports = { checkTraceIds, extractFrontmatterField, stateFromPath }