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.
- package/README.md +28 -11
- package/bin/trackfw.js +81 -0
- package/package.json +14 -8
- package/bin/trackfw +0 -41
- package/src/branch/prune.js +0 -450
- package/src/branch/runner.js +0 -153
- package/src/changelog/index.js +0 -114
- package/src/commands/adr.js +0 -56
- package/src/commands/agents.js +0 -3
- package/src/commands/audit-surface.js +0 -520
- package/src/commands/barrier.js +0 -822
- package/src/commands/baseline.js +0 -13
- package/src/commands/branch.js +0 -98
- package/src/commands/changelog.js +0 -29
- package/src/commands/commit.js +0 -66
- package/src/commands/configure.js +0 -106
- package/src/commands/context.js +0 -215
- package/src/commands/discover.js +0 -628
- package/src/commands/doctor.js +0 -66
- package/src/commands/help.js +0 -358
- package/src/commands/identity-wizard.js +0 -258
- package/src/commands/index.js +0 -68
- package/src/commands/init.js +0 -296
- package/src/commands/integrations.js +0 -305
- package/src/commands/log.js +0 -31
- package/src/commands/metrics.js +0 -242
- package/src/commands/note.js +0 -24
- package/src/commands/push.js +0 -51
- package/src/commands/release.js +0 -47
- package/src/commands/req.js +0 -98
- package/src/commands/roadmap.js +0 -44
- package/src/commands/serve.js +0 -345
- package/src/commands/ship.js +0 -58
- package/src/commands/skills.js +0 -3
- package/src/commands/status.js +0 -12
- package/src/commands/sync.js +0 -348
- package/src/commands/thirdparty.js +0 -390
- package/src/commands/update-harness.js +0 -1002
- package/src/commands/update.js +0 -500
- package/src/commands/validate.js +0 -57
- package/src/commands/version.js +0 -10
- package/src/commit/runner.js +0 -352
- package/src/config/index.js +0 -457
- package/src/forge/adapter.js +0 -189
- package/src/forge/resolve.js +0 -191
- package/src/generators/adr.js +0 -198
- package/src/generators/codex.js +0 -79
- package/src/generators/date.js +0 -23
- package/src/generators/hooks.js +0 -2414
- package/src/generators/init.js +0 -1563
- package/src/generators/note.js +0 -154
- package/src/generators/req.js +0 -436
- package/src/generators/roadmap.js +0 -841
- package/src/homedir.js +0 -30
- package/src/i18n/index.js +0 -53
- package/src/i18n/locales/en-US.json +0 -124
- package/src/i18n/locales/es-ES.json +0 -124
- package/src/i18n/locales/pt-BR.json +0 -124
- package/src/identity/config.js +0 -134
- package/src/identity/index.js +0 -19
- package/src/identity/preset.js +0 -219
- package/src/identity/slug.js +0 -62
- package/src/integrations/assets/agents/architect.md +0 -61
- package/src/integrations/assets/agents/backend.md +0 -41
- package/src/integrations/assets/agents/code-quality.md +0 -48
- package/src/integrations/assets/agents/data.md +0 -41
- package/src/integrations/assets/agents/dba.md +0 -41
- package/src/integrations/assets/agents/frontend.md +0 -41
- package/src/integrations/assets/agents/iac.md +0 -46
- package/src/integrations/assets/agents/infra.md +0 -43
- package/src/integrations/assets/agents/qa.md +0 -41
- package/src/integrations/assets/agents/security.md +0 -51
- package/src/integrations/assets/agents/tooling.md +0 -47
- package/src/integrations/assets/agents/ux.md +0 -48
- package/src/integrations/assets/catalog.json +0 -48
- package/src/integrations/assets/skills/architecture.md +0 -66
- package/src/integrations/assets/skills/backend.md +0 -67
- package/src/integrations/assets/skills/code-quality.md +0 -78
- package/src/integrations/assets/skills/data.md +0 -75
- package/src/integrations/assets/skills/dba.md +0 -77
- package/src/integrations/assets/skills/frontend.md +0 -70
- package/src/integrations/assets/skills/governance.md +0 -6
- package/src/integrations/assets/skills/iac.md +0 -90
- package/src/integrations/assets/skills/implement.md +0 -6
- package/src/integrations/assets/skills/infra.md +0 -62
- package/src/integrations/assets/skills/plan.md +0 -6
- package/src/integrations/assets/skills/qa.md +0 -63
- package/src/integrations/assets/skills/release.md +0 -6
- package/src/integrations/assets/skills/review.md +0 -6
- package/src/integrations/assets/skills/security.md +0 -74
- package/src/integrations/assets/skills/tooling.md +0 -80
- package/src/integrations/assets/skills/ux.md +0 -70
- package/src/integrations/catalog.js +0 -58
- package/src/integrations/doctor.js +0 -0
- package/src/integrations/doctor_remote.js +0 -224
- package/src/integrations/index.js +0 -171
- package/src/integrations/legacy.js +0 -35
- package/src/integrations/manager.js +0 -438
- package/src/integrations/register-agent.js +0 -106
- package/src/integrations/render.js +0 -563
- package/src/integrations/scaffold_doctor.js +0 -395
- package/src/lib/fatal-error.js +0 -64
- package/src/lib/pathfmt.js +0 -43
- package/src/lib/unknown-command.js +0 -82
- package/src/lib/update-engine.js +0 -242
- package/src/push/runner.js +0 -226
- package/src/release/runner.js +0 -474
- package/src/serve/api_attention.js +0 -24
- package/src/serve/api_board.js +0 -105
- package/src/serve/api_chain.js +0 -246
- package/src/serve/api_file.js +0 -117
- package/src/serve/api_metrics.js +0 -139
- package/src/serve/static/app.js +0 -1151
- package/src/serve/static/index.html +0 -338
- package/src/serve/static/style.css +0 -297
- package/src/ship/runner.js +0 -775
- package/src/thirdparty/fetch.js +0 -140
- package/src/thirdparty/markers.js +0 -207
- package/src/thirdparty/provenance.js +0 -114
- package/src/thirdparty/quarantine.js +0 -113
- package/src/thirdparty/references.js +0 -194
- package/src/validator/git-exec.js +0 -72
- package/src/validator/index.js +0 -4086
- 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
|
|
96
|
+
### npm
|
|
97
97
|
|
|
98
98
|
```bash
|
|
99
99
|
npm install -g trackfw
|
|
100
100
|
```
|
|
101
101
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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
|
-
-
|
|
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
|
-
|
|
172
|
-
|
|
173
|
-
|
|
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": "
|
|
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
|
|
55
|
+
"smoke": "node --check bin/trackfw.js && echo 'shim syntax ok'"
|
|
58
56
|
},
|
|
59
|
-
"
|
|
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
|
-
})
|