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
package/README.md CHANGED
@@ -93,15 +93,23 @@ brew install kgsaran/tap/trackfw
93
93
  go install github.com/kgsaran/trackfw/cmd/trackfw@latest
94
94
  ```
95
95
 
96
- ### npm (pure Node.js — no binary)
96
+ ### npm
97
97
 
98
98
  ```bash
99
99
  npm install -g trackfw
100
100
  ```
101
101
 
102
- The npm package is pure Node.js — no compiled binary or postinstall download.
103
- It installs wherever Node.js ≥ 18 is installed. Shared behavior, including the AI
104
- integration lifecycle, follows the [CLI parity contract](docs/cli-parity.md).
102
+ From v8.0.0, the npm package is a ~80-line JavaScript shim that resolves
103
+ `@trackfw-bin/<platform>` at install time and executes the Go binary. **It is no
104
+ longer pure Node.js — it contains a compiled binary.** The binary arrives through
105
+ the `npm` channel rather than as a separate download, so organisations whose policy
106
+ allows `npm install` but blocks direct executable downloads remain served.
107
+
108
+ If your policy forbids compiled binaries in any form regardless of channel, this
109
+ version is a breaking change for you. See [Changelog](CHANGELOG.md) for the full
110
+ declaration.
111
+
112
+ Shared behavior follows the [command contract](docs/cli-parity.md).
105
113
 
106
114
  > **The CLI installs on Node ≥ 18 alone — the generated guard hooks do not run on
107
115
  > Node alone.** They are POSIX shell scripts and need a POSIX shell to execute. On
@@ -118,8 +126,9 @@ are than let you find them after adoption.
118
126
 
119
127
  **What we know works**
120
128
 
121
- - The three CLIs install (`npm install -g trackfw`, `pip install trackfw`, and the
122
- published `trackfw_<version>_windows_amd64.tar.gz`).
129
+ - All three channels install (`npm install -g trackfw`, `pip install trackfw`, and the
130
+ published `trackfw_<version>_windows_amd64.tar.gz` / `windows_arm64.tar.gz`). From v8.0.0 all
131
+ three deliver the same Go binary; no separate Node.js or Python implementation.
123
132
  - Core governance commands — `req new`, `roadmap new`, `roadmap move`, `status`,
124
133
  `validate` — run, and artifacts are written with LF endings.
125
134
 
@@ -129,8 +138,6 @@ are than let you find them after adoption.
129
138
  Install manually from the release archive for now.
130
139
  - Our Windows CI still reports **known test failures**. They are mapped by root cause,
131
140
  not unknown — but they are not zero.
132
- - **Windows ARM64 is not built.** Only `windows_amd64` is published.
133
-
134
141
  **Guard hooks on Windows — measured, per agent CLI**
135
142
 
136
143
  The guard hooks are `.sh` scripts, executed by *your* AI agent CLI. Which shell that CLI
@@ -168,9 +175,19 @@ an issue with what you measured.
168
175
  pip install trackfw
169
176
  ```
170
177
 
171
- The pip package is pure Python 3.10+ — no compiled binary or postinstall
172
- download. Shared commands, validation rules, and by_agent behavior follow the
173
- [CLI parity contract](docs/cli-parity.md).
178
+ From v8.0.0, the pip package is a binary wheel in `gh-bin` format — **it contains
179
+ no Python files and no source**. The Go binary is installed into the PATH by pip.
180
+ `python -m trackfw` no longer works; use the `trackfw` executable directly.
181
+
182
+ Platforms not covered by the published wheels now fail at resolution time with
183
+ "no matching distribution found" — a clean failure instead of silently installing
184
+ the wrong thing. Eight wheels are published: `manylinux_2_17_x86_64`, `musllinux_1_2_x86_64`,
185
+ `manylinux_2_17_aarch64`, `musllinux_1_2_aarch64`, `macosx_10_9_x86_64`,
186
+ `macosx_11_0_arm64`, `win_amd64`, `win_arm64`. Linux publishes two wheels per
187
+ architecture (manylinux + musllinux), so Alpine and similar musl-based distributions
188
+ are covered.
189
+
190
+ Shared behavior follows the [command contract](docs/cli-parity.md).
174
191
 
175
192
  ---
176
193
 
package/bin/trackfw.js ADDED
@@ -0,0 +1,81 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+
4
+ // trackfw shim — resolves the platform binary at runtime.
5
+ // Design: NO postinstall. Binary is located here, at require() time.
6
+ // Prior art: esbuild (https://esbuild.github.io/getting-started/#download-using-npm)
7
+ //
8
+ // Resolution strategy: platform packages carry NO `bin` field — that field would
9
+ // create a collision in node_modules/.bin/trackfw (npm install-order dependent,
10
+ // nondeterministic). Instead, the shim computes the binary subpath from os.platform()
11
+ // directly (same pattern as esbuild), then joins with the already-known pkgDir.
12
+ // No package metadata consulted for the path.
13
+ //
14
+ // Ported from prototype/packages/trackfw-shim/bin/trackfw.js (validated in
15
+ // darwin/arm64, win32/arm64, win32/x64) — ML-1B, ROADMAP-2026-09-12-v8.
16
+
17
+ const path = require("path");
18
+ const fs = require("fs");
19
+ const { spawnSync } = require("child_process");
20
+ const os = require("os");
21
+
22
+ function getPlatformPackage() {
23
+ const platform = os.platform(); // 'linux', 'darwin', 'win32'
24
+ const arch = os.arch(); // 'x64', 'arm64'
25
+ // Dynamic: package name is constructed from platform+arch.
26
+ // No hardcoded allowlist — new platforms are supported automatically once published.
27
+ return `@trackfw-bin/${platform}-${arch}`;
28
+ }
29
+
30
+ function resolveBinaryPath(pkg) {
31
+ // Resolve the platform package from node_modules relative to this shim.
32
+ // This works with or without postinstall, under --ignore-scripts.
33
+ let pkgPath;
34
+ try {
35
+ pkgPath = require.resolve(`${pkg}/package.json`);
36
+ } catch (e) {
37
+ const platform = os.platform();
38
+ const arch = os.arch();
39
+ process.stderr.write(
40
+ `trackfw: platform package for ${platform}/${arch} (${pkg}) is not installed.\n` +
41
+ `This usually means the optional dependency was skipped during install.\n` +
42
+ `Try: npm install (without --no-optional) or install ${pkg} directly.\n`
43
+ );
44
+ process.exit(1);
45
+ }
46
+
47
+ const pkgDir = path.dirname(pkgPath);
48
+
49
+ // Compute binary subpath from platform — platform packages carry no `bin` field
50
+ // (avoids nondeterministic collision in node_modules/.bin/ from install order).
51
+ const binaryName = os.platform() === "win32" ? "trackfw.exe" : "trackfw";
52
+ const resolvedBin = path.join(pkgDir, "bin", binaryName);
53
+
54
+ // Fail loudly and name the cause — AC7: no MODULE_NOT_FOUND surprises.
55
+ if (!fs.existsSync(resolvedBin)) {
56
+ process.stderr.write(
57
+ `trackfw: platform binary not found in ${pkg}.\n` +
58
+ `Expected: ${resolvedBin}\n` +
59
+ `The platform package may be corrupted or missing the binary in bin/${binaryName}.\n`
60
+ );
61
+ process.exit(1);
62
+ }
63
+
64
+ return resolvedBin;
65
+ }
66
+
67
+ const pkg = getPlatformPackage();
68
+ const binPath = resolveBinaryPath(pkg);
69
+
70
+ // Pass all argv through to the binary.
71
+ const result = spawnSync(binPath, process.argv.slice(2), {
72
+ stdio: "inherit",
73
+ env: process.env,
74
+ });
75
+
76
+ if (result.error) {
77
+ process.stderr.write(`trackfw: failed to run binary: ${result.error.message}\n`);
78
+ process.exit(1);
79
+ }
80
+
81
+ process.exit(result.status ?? 1);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trackfw",
3
- "version": "7.6.0",
3
+ "version": "8.0.0-rc2",
4
4
  "description": "Governance CLI for AI-native software delivery and AI coding agents. Enforces traceability: ADR → REQ → ROADMAP → kanban. Native support for Codex, Claude Code, Gemini CLI, Cursor, Copilot, Windsurf, Amazon Q, OpenCode, and Kiro.",
5
5
  "keywords": [
6
6
  "cli",
@@ -45,23 +45,29 @@
45
45
  },
46
46
  "license": "MIT",
47
47
  "bin": {
48
- "trackfw": "./bin/trackfw"
48
+ "trackfw": "./bin/trackfw.js"
49
49
  },
50
- "main": "./src/commands/index.js",
51
50
  "files": [
52
- "bin/",
53
- "src/"
51
+ "bin/trackfw.js"
54
52
  ],
55
53
  "scripts": {
56
54
  "test": "node --test tests/*.test.js",
57
- "smoke": "node bin/trackfw --help && node bin/trackfw version"
55
+ "smoke": "node --check bin/trackfw.js && echo 'shim syntax ok'"
58
56
  },
59
- "dependencies": {
60
- "commander": "^12.0.0",
57
+ "devDependencies": {
61
58
  "@inquirer/prompts": "^5.0.0",
59
+ "commander": "^12.0.0",
62
60
  "yaml": "^2.9.0"
63
61
  },
64
62
  "engines": {
65
63
  "node": ">=18"
64
+ },
65
+ "optionalDependencies": {
66
+ "@trackfw-bin/darwin-arm64": "8.0.0-rc2",
67
+ "@trackfw-bin/darwin-x64": "8.0.0-rc2",
68
+ "@trackfw-bin/linux-arm64": "8.0.0-rc2",
69
+ "@trackfw-bin/linux-x64": "8.0.0-rc2",
70
+ "@trackfw-bin/win32-arm64": "8.0.0-rc2",
71
+ "@trackfw-bin/win32-x64": "8.0.0-rc2"
66
72
  }
67
73
  }
package/bin/trackfw DELETED
@@ -1,41 +0,0 @@
1
- #!/usr/bin/env node
2
- 'use strict'
3
-
4
- const { reportFatalError, installGlobalHandlers } = require('../src/lib/fatal-error')
5
-
6
- // Registered before any command runs — see fatal-error.js for why this is a
7
- // single entrypoint-level handler instead of a try/catch per command.
8
- installGlobalHandlers()
9
-
10
- const program = require('../src/commands/index').createProgram()
11
-
12
- // trackfw sem argumento é uso legítimo (pedir ajuda), não erro — decisão do
13
- // arquiteto no ML-1C (ROADMAP-2026-08-16-higiene-...). Sem intervenção,
14
- // commander trata "nenhum operando" como "provavelmente faltou um
15
- // subcomando" (Command._parseCommand: `this.commands.length && this.args
16
- // .length === 0 && !this._actionHandler` → `this.help({error: true})`) —
17
- // help em stderr, exit 1. Interceptar SÓ o caso de zero argumentos aqui,
18
- // antes de entrar no parser, reusa o MESMO texto de ajuda (outputHelp) na
19
- // saída canônica (stdout, exit 0) sem tocar no parsing normal — em
20
- // particular sem registrar uma .action() no root, que reclassificaria um
21
- // comando desconhecido (ex.: "trackfw naoexiste") como argumento posicional
22
- // da action em vez de disparar o listener 'command:*' (regressão descartada
23
- // em favor desta abordagem: ver ROADMAP ML-1C).
24
- //
25
- // Fica ANTES do parseAsync e DEPOIS de installGlobalHandlers(): o caminho de
26
- // zero argumentos é sucesso e nunca deve passar pelo reportFatalError abaixo.
27
- if (process.argv.length <= 2) {
28
- program.outputHelp()
29
- process.exit(0)
30
- }
31
-
32
- program
33
- .parseAsync(process.argv)
34
- .catch((err) => {
35
- // The primary path: an action (sync or async) threw, and since the
36
- // program is driven by parseAsync() that surfaces here as a rejected
37
- // promise — not as an uncaughtException/unhandledRejection, which is
38
- // why this .catch exists in addition to installGlobalHandlers() above.
39
- reportFatalError(err)
40
- process.exitCode = 1
41
- })