trackops 2.1.0 → 2.2.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.
- package/README.md +14 -2
- package/lib/opera.js +1 -1
- package/lib/skills.js +94 -41
- package/package.json +6 -6
- package/scripts/skills-marketplace-smoke.js +156 -124
- package/scripts/smoke-tests.js +21 -14
- package/scripts/sync-skill-version.js +29 -19
- package/scripts/validate-skill.js +188 -103
- package/skills/trackops/SKILL.md +25 -7
- package/skills/trackops/locales/en/SKILL.md +25 -7
- package/skills/trackops/locales/en/references/activation.md +3 -3
- package/skills/trackops/locales/en/references/workflow.md +5 -4
- package/skills/trackops/references/activation.md +3 -3
- package/skills/trackops/references/workflow.md +5 -4
- package/skills/trackops/skill.json +2 -2
- package/skills/trackops-quality-guard/SKILL.md +78 -0
- package/skills/trackops-quality-guard/agents/openai.yaml +7 -0
- package/skills/trackops-quality-guard/locales/en/SKILL.md +78 -0
- package/skills/trackops-quality-guard/locales/en/references/commands.md +36 -0
- package/skills/trackops-quality-guard/locales/en/references/decision-policy.md +16 -0
- package/skills/trackops-quality-guard/locales/en/references/output-format.md +24 -0
- package/skills/trackops-quality-guard/references/commands.md +36 -0
- package/skills/trackops-quality-guard/references/decision-policy.md +16 -0
- package/skills/trackops-quality-guard/references/output-format.md +24 -0
- package/skills/trackops-quality-guard/skill.json +28 -0
- package/templates/skills/opera-skill/SKILL.md +4 -0
- package/templates/skills/opera-skill/locales/en/SKILL.md +4 -0
- package/templates/skills/trackops-quality-guard/SKILL.md +72 -0
- package/templates/skills/trackops-quality-guard/locales/en/SKILL.md +72 -0
- package/templates/skills/trackops-quality-guard/locales/en/references/commands.md +30 -0
- package/templates/skills/trackops-quality-guard/locales/en/references/decision-policy.md +14 -0
- package/templates/skills/trackops-quality-guard/locales/en/references/output-format.md +21 -0
- package/templates/skills/trackops-quality-guard/references/commands.md +30 -0
- package/templates/skills/trackops-quality-guard/references/decision-policy.md +14 -0
- package/templates/skills/trackops-quality-guard/references/output-format.md +21 -0
- package/templates/skills/opera-quality-guard/SKILL.md +0 -26
- package/templates/skills/opera-quality-guard/locales/en/SKILL.md +0 -26
|
@@ -1,103 +1,188 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
const fs = require("fs");
|
|
4
|
-
const path = require("path");
|
|
5
|
-
|
|
6
|
-
const ROOT = path.resolve(__dirname, "..");
|
|
7
|
-
const PACKAGE_FILE = path.join(ROOT, "package.json");
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
if (fs.existsSync(
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const path = require("path");
|
|
5
|
+
|
|
6
|
+
const ROOT = path.resolve(__dirname, "..");
|
|
7
|
+
const PACKAGE_FILE = path.join(ROOT, "package.json");
|
|
8
|
+
const SKILLS_ROOT = path.join(ROOT, "skills");
|
|
9
|
+
const REQUIRED_AGENTS = ["antigravity", "claude-code", "codex", "cursor", "gemini-cli", "github-copilot", "kiro-cli"];
|
|
10
|
+
const REQUIRED_PUBLIC_SKILLS = ["trackops", "trackops-quality-guard"];
|
|
11
|
+
|
|
12
|
+
const SKILL_REQUIREMENTS = {
|
|
13
|
+
trackops: {
|
|
14
|
+
requiredFiles: [
|
|
15
|
+
"SKILL.md",
|
|
16
|
+
"skill.json",
|
|
17
|
+
"agents/openai.yaml",
|
|
18
|
+
"references/activation.md",
|
|
19
|
+
"references/workflow.md",
|
|
20
|
+
"references/troubleshooting.md",
|
|
21
|
+
"locales/en/SKILL.md",
|
|
22
|
+
"locales/en/references/activation.md",
|
|
23
|
+
"locales/en/references/workflow.md",
|
|
24
|
+
"locales/en/references/troubleshooting.md",
|
|
25
|
+
],
|
|
26
|
+
requiredPhrases: [
|
|
27
|
+
"npx skills add Baxahaun/trackops",
|
|
28
|
+
"npm install -g trackops",
|
|
29
|
+
"trackops --version",
|
|
30
|
+
"trackops init",
|
|
31
|
+
"trackops opera install",
|
|
32
|
+
"trackops opera bootstrap --resume",
|
|
33
|
+
"trackops-quality-guard",
|
|
34
|
+
],
|
|
35
|
+
forbiddenPhrases: [
|
|
36
|
+
"node scripts/bootstrap-trackops.js",
|
|
37
|
+
"ensures the runtime on first use",
|
|
38
|
+
"asegura el runtime en el primer uso",
|
|
39
|
+
],
|
|
40
|
+
validate(skill, skillMd, pkg, skillDir) {
|
|
41
|
+
if (skill.bootstrapPolicy !== "explicit_install") {
|
|
42
|
+
fail("skills/trackops/skill.json must use bootstrapPolicy 'explicit_install'.");
|
|
43
|
+
}
|
|
44
|
+
if (fs.existsSync(path.join(skillDir, "scripts", "bootstrap-trackops.js"))) {
|
|
45
|
+
fail("skills/trackops must not publish scripts/bootstrap-trackops.js.");
|
|
46
|
+
}
|
|
47
|
+
for (const phrase of [
|
|
48
|
+
"npx skills add Baxahaun/trackops",
|
|
49
|
+
"npm install -g trackops",
|
|
50
|
+
"trackops --version",
|
|
51
|
+
]) {
|
|
52
|
+
if (!skillMd.includes(phrase)) {
|
|
53
|
+
fail(`skills/trackops/SKILL.md must mention '${phrase}'.`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (skill.npmPackage !== pkg.name) {
|
|
57
|
+
fail(`skills/trackops/skill.json must target npm package '${pkg.name}'.`);
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
"trackops-quality-guard": {
|
|
62
|
+
requiredFiles: [
|
|
63
|
+
"SKILL.md",
|
|
64
|
+
"skill.json",
|
|
65
|
+
"agents/openai.yaml",
|
|
66
|
+
"references/commands.md",
|
|
67
|
+
"references/decision-policy.md",
|
|
68
|
+
"references/output-format.md",
|
|
69
|
+
"locales/en/SKILL.md",
|
|
70
|
+
"locales/en/references/commands.md",
|
|
71
|
+
"locales/en/references/decision-policy.md",
|
|
72
|
+
"locales/en/references/output-format.md",
|
|
73
|
+
],
|
|
74
|
+
requiredPhrases: [
|
|
75
|
+
"trackops quality status",
|
|
76
|
+
"trackops quality verify",
|
|
77
|
+
"trackops quality release-readiness",
|
|
78
|
+
"trackops quality promote-readiness --target production",
|
|
79
|
+
"Estado actual",
|
|
80
|
+
"Blockers reales",
|
|
81
|
+
"Acción siguiente",
|
|
82
|
+
"Decisión final",
|
|
83
|
+
],
|
|
84
|
+
forbiddenPhrases: [
|
|
85
|
+
"opera-quality-guard",
|
|
86
|
+
],
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
function fail(message) {
|
|
91
|
+
console.error(message);
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function discoverPublicSkills() {
|
|
96
|
+
if (!fs.existsSync(SKILLS_ROOT)) return [];
|
|
97
|
+
return fs.readdirSync(SKILLS_ROOT, { withFileTypes: true })
|
|
98
|
+
.filter((entry) => entry.isDirectory() && fs.existsSync(path.join(SKILLS_ROOT, entry.name, "skill.json")))
|
|
99
|
+
.map((entry) => ({
|
|
100
|
+
name: entry.name,
|
|
101
|
+
dir: path.join(SKILLS_ROOT, entry.name),
|
|
102
|
+
configPath: path.join(SKILLS_ROOT, entry.name, "skill.json"),
|
|
103
|
+
skillMdPath: path.join(SKILLS_ROOT, entry.name, "SKILL.md"),
|
|
104
|
+
}))
|
|
105
|
+
.sort((a, b) => a.name.localeCompare(b.name));
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function validateCommon(pkg, descriptor, skill, skillMd) {
|
|
109
|
+
if (!Array.isArray(pkg.files) || !pkg.files.includes("skills/")) {
|
|
110
|
+
fail("package.json must publish the skills/ directory.");
|
|
111
|
+
}
|
|
112
|
+
if (skill.name !== descriptor.name) {
|
|
113
|
+
fail(`${path.relative(ROOT, descriptor.configPath)} must declare name '${descriptor.name}'.`);
|
|
114
|
+
}
|
|
115
|
+
if (skill.skillVersion !== pkg.version || skill.trackopsVersion !== pkg.version) {
|
|
116
|
+
fail(`${path.relative(ROOT, descriptor.configPath)} must be synced to package version ${pkg.version}.`);
|
|
117
|
+
}
|
|
118
|
+
if (skill.npmPackage !== pkg.name) {
|
|
119
|
+
fail(`${path.relative(ROOT, descriptor.configPath)} must target npm package '${pkg.name}'.`);
|
|
120
|
+
}
|
|
121
|
+
if (!skill.distribution || skill.distribution.source !== "Baxahaun/trackops") {
|
|
122
|
+
fail(`${path.relative(ROOT, descriptor.configPath)} must declare distribution.source 'Baxahaun/trackops'.`);
|
|
123
|
+
}
|
|
124
|
+
if (skill.distribution.skill !== descriptor.name) {
|
|
125
|
+
fail(`${path.relative(ROOT, descriptor.configPath)} must declare distribution.skill '${descriptor.name}'.`);
|
|
126
|
+
}
|
|
127
|
+
if (skill.distribution.fullDepth !== true) {
|
|
128
|
+
fail(`${path.relative(ROOT, descriptor.configPath)} must declare distribution.fullDepth true.`);
|
|
129
|
+
}
|
|
130
|
+
const expectedSkillPath = path.relative(ROOT, descriptor.dir).replace(/\\/g, "/");
|
|
131
|
+
if (skill.repository?.skillPath !== expectedSkillPath) {
|
|
132
|
+
fail(`${path.relative(ROOT, descriptor.configPath)} must declare repository.skillPath '${expectedSkillPath}'.`);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const supportedAgents = Array.isArray(skill.supportedAgentsV1) ? skill.supportedAgentsV1 : [];
|
|
136
|
+
for (const agent of REQUIRED_AGENTS) {
|
|
137
|
+
if (!supportedAgents.includes(agent)) {
|
|
138
|
+
fail(`${path.relative(ROOT, descriptor.configPath)} must include supported agent '${agent}'.`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const requirements = SKILL_REQUIREMENTS[descriptor.name] || { requiredPhrases: [], forbiddenPhrases: [] };
|
|
143
|
+
for (const phrase of requirements.requiredPhrases) {
|
|
144
|
+
if (!skillMd.includes(phrase)) {
|
|
145
|
+
fail(`${path.relative(ROOT, descriptor.skillMdPath)} must mention '${phrase}'.`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
for (const phrase of requirements.forbiddenPhrases) {
|
|
149
|
+
if (skillMd.includes(phrase)) {
|
|
150
|
+
fail(`${path.relative(ROOT, descriptor.skillMdPath)} must not mention '${phrase}'.`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function main() {
|
|
156
|
+
const pkg = JSON.parse(fs.readFileSync(PACKAGE_FILE, "utf8"));
|
|
157
|
+
const skills = discoverPublicSkills();
|
|
158
|
+
if (!skills.length) {
|
|
159
|
+
fail("No public skills were found under skills/.");
|
|
160
|
+
}
|
|
161
|
+
for (const skillName of REQUIRED_PUBLIC_SKILLS) {
|
|
162
|
+
if (!skills.some((descriptor) => descriptor.name === skillName)) {
|
|
163
|
+
fail(`Missing required public skill under skills/: ${skillName}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
for (const descriptor of skills) {
|
|
168
|
+
const requirements = SKILL_REQUIREMENTS[descriptor.name] || { requiredFiles: ["SKILL.md", "skill.json"] };
|
|
169
|
+
for (const relativeFile of requirements.requiredFiles) {
|
|
170
|
+
const filePath = path.join(descriptor.dir, relativeFile);
|
|
171
|
+
if (!fs.existsSync(filePath)) {
|
|
172
|
+
fail(`Missing required skill file: ${path.relative(ROOT, filePath)}`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
const skill = JSON.parse(fs.readFileSync(descriptor.configPath, "utf8"));
|
|
177
|
+
const skillMd = fs.readFileSync(descriptor.skillMdPath, "utf8");
|
|
178
|
+
validateCommon(pkg, descriptor, skill, skillMd);
|
|
179
|
+
|
|
180
|
+
if (typeof requirements.validate === "function") {
|
|
181
|
+
requirements.validate(skill, skillMd, pkg, descriptor.dir);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
console.log(`${path.relative(ROOT, descriptor.dir)} validated successfully.`);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
main();
|
package/skills/trackops/SKILL.md
CHANGED
|
@@ -20,11 +20,12 @@ Esta skill es la puerta de entrada al sistema. Úsala cuando alguien:
|
|
|
20
20
|
|
|
21
21
|
Esta skill:
|
|
22
22
|
|
|
23
|
-
- explica qué es TrackOps y cuándo conviene usarlo
|
|
24
|
-
- exige una instalación explícita y visible del runtime
|
|
25
|
-
- guía la activación por repositorio
|
|
26
|
-
- ayuda a decidir si OPERA debe seguir por `direct bootstrap` o por `agent handoff`
|
|
27
|
-
- explica que al instalar OPERA se activa un equipo de agentes coordinados por `opera-skill`
|
|
23
|
+
- explica qué es TrackOps y cuándo conviene usarlo
|
|
24
|
+
- exige una instalación explícita y visible del runtime
|
|
25
|
+
- guía la activación por repositorio
|
|
26
|
+
- ayuda a decidir si OPERA debe seguir por `direct bootstrap` o por `agent handoff`
|
|
27
|
+
- explica que al instalar OPERA se activa un equipo de agentes coordinados por `opera-skill`
|
|
28
|
+
- deriva decisiones de calidad, release y producción hacia `trackops-quality-guard`
|
|
28
29
|
|
|
29
30
|
## Que no hace esta skill
|
|
30
31
|
|
|
@@ -115,8 +116,25 @@ trackops opera bootstrap --resume
|
|
|
115
116
|
- la skill global instala instrucciones en el agente
|
|
116
117
|
- el runtime se instala por separado con npm
|
|
117
118
|
- `trackops init` activa el proyecto
|
|
118
|
-
- `trackops opera install` anade el framework operativo completo solo cuando hace falta
|
|
119
|
-
- TrackOps separa producto y operacion para que el repo no se vuelva caotico
|
|
119
|
+
- `trackops opera install` anade el framework operativo completo solo cuando hace falta
|
|
120
|
+
- TrackOps separa producto y operacion para que el repo no se vuelva caotico
|
|
121
|
+
|
|
122
|
+
## Cuándo delegar a `trackops-quality-guard`
|
|
123
|
+
|
|
124
|
+
Si TrackOps ya está activo y el usuario pide:
|
|
125
|
+
|
|
126
|
+
- una auditoría de calidad del proyecto
|
|
127
|
+
- validar si algo está listo para release
|
|
128
|
+
- validar si algo puede ir a producción
|
|
129
|
+
- revisar blockers antes de entregar
|
|
130
|
+
|
|
131
|
+
entonces deriva a `trackops-quality-guard`.
|
|
132
|
+
|
|
133
|
+
Si esa skill no está instalada todavía, la instalación explícita es:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
npx skills add Baxahaun/trackops --skill trackops-quality-guard --agent "*" --global -y
|
|
137
|
+
```
|
|
120
138
|
|
|
121
139
|
## Que referencia leer y cuando
|
|
122
140
|
|
|
@@ -20,11 +20,12 @@ This skill is the entry point to the system. Use it when someone:
|
|
|
20
20
|
|
|
21
21
|
This skill:
|
|
22
22
|
|
|
23
|
-
- explains what TrackOps is and when to use it
|
|
24
|
-
- requires an explicit and visible runtime installation
|
|
25
|
-
- guides per-repository activation
|
|
26
|
-
- helps route OPERA into either `direct bootstrap` or `agent handoff`
|
|
27
|
-
- explains that installing OPERA activates a team of agents coordinated by `opera-skill`
|
|
23
|
+
- explains what TrackOps is and when to use it
|
|
24
|
+
- requires an explicit and visible runtime installation
|
|
25
|
+
- guides per-repository activation
|
|
26
|
+
- helps route OPERA into either `direct bootstrap` or `agent handoff`
|
|
27
|
+
- explains that installing OPERA activates a team of agents coordinated by `opera-skill`
|
|
28
|
+
- routes quality, release, and production decisions to `trackops-quality-guard`
|
|
28
29
|
|
|
29
30
|
## What this skill does not do
|
|
30
31
|
|
|
@@ -115,8 +116,25 @@ trackops opera bootstrap --resume
|
|
|
115
116
|
- the global skill installs instructions into the agent
|
|
116
117
|
- the runtime is installed separately with npm
|
|
117
118
|
- `trackops init` activates the project
|
|
118
|
-
- `trackops opera install` adds the full operating framework only when needed
|
|
119
|
-
- TrackOps separates product and operations so the repository stays manageable
|
|
119
|
+
- `trackops opera install` adds the full operating framework only when needed
|
|
120
|
+
- TrackOps separates product and operations so the repository stays manageable
|
|
121
|
+
|
|
122
|
+
## When to delegate to `trackops-quality-guard`
|
|
123
|
+
|
|
124
|
+
If TrackOps is already active and the user asks for:
|
|
125
|
+
|
|
126
|
+
- a project quality audit
|
|
127
|
+
- a release-readiness decision
|
|
128
|
+
- a production-readiness decision
|
|
129
|
+
- a blocker review before delivery
|
|
130
|
+
|
|
131
|
+
then delegate to `trackops-quality-guard`.
|
|
132
|
+
|
|
133
|
+
If that skill is not installed yet, the explicit install is:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
npx skills add Baxahaun/trackops --skill trackops-quality-guard --agent "*" --global -y
|
|
137
|
+
```
|
|
120
138
|
|
|
121
139
|
## Which reference to read and when
|
|
122
140
|
|
|
@@ -27,9 +27,9 @@ trackops init
|
|
|
27
27
|
trackops opera install
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
`trackops opera install` also activates the project agent team:
|
|
31
|
-
- `opera-skill` (coordinator)
|
|
32
|
-
- `project-starter-skill`, `opera-contract-auditor`, `opera-policy-guard`
|
|
30
|
+
`trackops opera install` also activates the project agent team:
|
|
31
|
+
- `opera-skill` (coordinator)
|
|
32
|
+
- `trackops-quality-guard`, `project-starter-skill`, `opera-contract-auditor`, `opera-policy-guard`
|
|
33
33
|
|
|
34
34
|
By default, `trackops init` creates a split workspace with:
|
|
35
35
|
|
|
@@ -37,10 +37,11 @@ If OPERA is installed:
|
|
|
37
37
|
|
|
38
38
|
When OPERA is installed, a team of specialized agents is activated:
|
|
39
39
|
|
|
40
|
-
- `opera-skill` — coordinator. Decides phase, state, delegation, and blocking.
|
|
41
|
-
- `
|
|
42
|
-
- `
|
|
43
|
-
- `opera-
|
|
40
|
+
- `opera-skill` — coordinator. Decides phase, state, delegation, and blocking.
|
|
41
|
+
- `trackops-quality-guard` — quality, verification, and readiness guard
|
|
42
|
+
- `project-starter-skill` — discovery and structuring
|
|
43
|
+
- `opera-contract-auditor` — operating contract audit
|
|
44
|
+
- `opera-policy-guard` — risk control
|
|
44
45
|
|
|
45
46
|
Additional skills available:
|
|
46
47
|
|
|
@@ -27,9 +27,9 @@ trackops init
|
|
|
27
27
|
trackops opera install
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
`trackops opera install` también activa el equipo de agentes del proyecto:
|
|
31
|
-
- `opera-skill` (coordinadora)
|
|
32
|
-
- `project-starter-skill`, `opera-contract-auditor`, `opera-policy-guard`
|
|
30
|
+
`trackops opera install` también activa el equipo de agentes del proyecto:
|
|
31
|
+
- `opera-skill` (coordinadora)
|
|
32
|
+
- `trackops-quality-guard`, `project-starter-skill`, `opera-contract-auditor`, `opera-policy-guard`
|
|
33
33
|
|
|
34
34
|
Por defecto, `trackops init` crea un workspace split con:
|
|
35
35
|
|
|
@@ -37,10 +37,11 @@ Si OPERA está instalado:
|
|
|
37
37
|
|
|
38
38
|
Cuando OPERA está instalado, se activa un equipo de agentes especializados:
|
|
39
39
|
|
|
40
|
-
- `opera-skill` — coordinadora. Decide fase, estado, delegación y bloqueo.
|
|
41
|
-
- `
|
|
42
|
-
- `
|
|
43
|
-
- `opera-
|
|
40
|
+
- `opera-skill` — coordinadora. Decide fase, estado, delegación y bloqueo.
|
|
41
|
+
- `trackops-quality-guard` — guardia de calidad, verificación y readiness
|
|
42
|
+
- `project-starter-skill` — descubrimiento y estructuración
|
|
43
|
+
- `opera-contract-auditor` — auditoría del contrato operativo
|
|
44
|
+
- `opera-policy-guard` — control de riesgo
|
|
44
45
|
|
|
45
46
|
También se pueden instalar:
|
|
46
47
|
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"name": "trackops",
|
|
3
3
|
"shortDescription": "Global TrackOps skill that explains TrackOps, requires explicit runtime install, and guides per-repository activation.",
|
|
4
4
|
"description": "Explains what TrackOps does, installs the global skill layer, requires explicit runtime installation with npm, supports Spanish and English, activates TrackOps repository by repository, and routes OPERA onboarding into either direct bootstrap or agent-led discovery.",
|
|
5
|
-
"skillVersion": "2.
|
|
6
|
-
"trackopsVersion": "2.
|
|
5
|
+
"skillVersion": "2.2.0",
|
|
6
|
+
"trackopsVersion": "2.2.0",
|
|
7
7
|
"npmPackage": "trackops",
|
|
8
8
|
"bootstrapPolicy": "explicit_install",
|
|
9
9
|
"supportedAgentsV1": [
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "trackops-quality-guard"
|
|
3
|
+
description: "Skill pública de TrackOps para inspeccionar calidad, ejecutar verificaciones declaradas y decidir readiness antes de release o recomendaciones de producción."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0"
|
|
6
|
+
type: "global"
|
|
7
|
+
triggers:
|
|
8
|
+
- "quality"
|
|
9
|
+
- "calidad"
|
|
10
|
+
- "auditar"
|
|
11
|
+
- "auditoría"
|
|
12
|
+
- "readiness"
|
|
13
|
+
- "release readiness"
|
|
14
|
+
- "production readiness"
|
|
15
|
+
- "verifica calidad"
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# TrackOps Quality Guard
|
|
19
|
+
|
|
20
|
+
Si la conversación y el proyecto deben trabajar en inglés, lee `locales/en/SKILL.md` antes de seguir.
|
|
21
|
+
|
|
22
|
+
## Misión
|
|
23
|
+
|
|
24
|
+
Complementar TrackOps con una guardia explícita de calidad y readiness de salida.
|
|
25
|
+
|
|
26
|
+
## Cuándo usarla
|
|
27
|
+
|
|
28
|
+
Usa esta skill cuando el usuario:
|
|
29
|
+
|
|
30
|
+
- pida una auditoría de calidad del proyecto
|
|
31
|
+
- quiera validar si algo está listo para release
|
|
32
|
+
- quiera validar si algo puede ir a producción
|
|
33
|
+
- necesite revisar blockers reales antes de cerrar fase o entregar
|
|
34
|
+
|
|
35
|
+
## Qué no hace
|
|
36
|
+
|
|
37
|
+
Esta skill no:
|
|
38
|
+
|
|
39
|
+
- sustituye al runtime `trackops quality ...`
|
|
40
|
+
- inventa checks o criterios fuera del runtime
|
|
41
|
+
- reinterpretar blockers para hacerlos “más suaves”
|
|
42
|
+
- publica, despliega o aprueba por su cuenta
|
|
43
|
+
|
|
44
|
+
## Comandos obligatorios
|
|
45
|
+
|
|
46
|
+
- antes de cerrar una fase o declarar estabilidad, ejecuta `trackops quality status`
|
|
47
|
+
- si la decisión afecta a fase, consulta también `trackops quality phase-readiness`
|
|
48
|
+
- tras cambios relevantes en código, entorno, build o smoke, ejecuta `trackops quality verify`
|
|
49
|
+
- antes de `trackops release`, ejecuta `trackops quality release-readiness`
|
|
50
|
+
- antes de recomendar producción, ejecuta `trackops quality promote-readiness --target production`
|
|
51
|
+
|
|
52
|
+
## Reglas de decisión
|
|
53
|
+
|
|
54
|
+
- `phase-readiness` es informativo
|
|
55
|
+
- `release-readiness` decide si se puede liberar
|
|
56
|
+
- `promote-readiness` decide si se puede recomendar producción
|
|
57
|
+
- si el runtime marca bloqueo, no inventes excepciones
|
|
58
|
+
|
|
59
|
+
## Política de waivers
|
|
60
|
+
|
|
61
|
+
- solo usa waivers si existe aprobación humana explícita
|
|
62
|
+
- un waiver debe tener caducidad
|
|
63
|
+
- un waiver no borra la evidencia ni convierte un bloqueo en “no pasó nada”
|
|
64
|
+
|
|
65
|
+
## Salida obligatoria
|
|
66
|
+
|
|
67
|
+
Responde siempre con este orden exacto:
|
|
68
|
+
|
|
69
|
+
1. `Estado actual`
|
|
70
|
+
2. `Blockers reales`
|
|
71
|
+
3. `Acción siguiente`
|
|
72
|
+
4. `Decisión final`
|
|
73
|
+
|
|
74
|
+
## Qué referencia leer y cuándo
|
|
75
|
+
|
|
76
|
+
- lee `references/commands.md` para decidir qué comando corre en cada momento
|
|
77
|
+
- lee `references/decision-policy.md` para interpretar advisory vs gate duro
|
|
78
|
+
- lee `references/output-format.md` antes de responder si la salida puede afectar una decisión de release o producción
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "TrackOps Quality Guard"
|
|
3
|
+
short_description: "Inspect quality and decide release readiness"
|
|
4
|
+
default_prompt: "Use $trackops-quality-guard to inspect TrackOps quality status, run declared verification, and decide release or production readiness without inventing blockers."
|
|
5
|
+
|
|
6
|
+
policy:
|
|
7
|
+
allow_implicit_invocation: true
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "trackops-quality-guard"
|
|
3
|
+
description: "Public TrackOps skill for inspecting quality, running declared verification, and deciding readiness before release or production recommendations."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0"
|
|
6
|
+
type: "global"
|
|
7
|
+
triggers:
|
|
8
|
+
- "quality"
|
|
9
|
+
- "calidad"
|
|
10
|
+
- "auditar"
|
|
11
|
+
- "auditoría"
|
|
12
|
+
- "readiness"
|
|
13
|
+
- "release readiness"
|
|
14
|
+
- "production readiness"
|
|
15
|
+
- "verifica calidad"
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# TrackOps Quality Guard
|
|
19
|
+
|
|
20
|
+
Use this localized file when the conversation and project should run in English.
|
|
21
|
+
|
|
22
|
+
## Mission
|
|
23
|
+
|
|
24
|
+
Complement TrackOps with an explicit quality and production-readiness guard.
|
|
25
|
+
|
|
26
|
+
## When to use it
|
|
27
|
+
|
|
28
|
+
Use this skill when the user:
|
|
29
|
+
|
|
30
|
+
- asks for a project quality audit
|
|
31
|
+
- wants to know whether something is ready for release
|
|
32
|
+
- wants to know whether something can go to production
|
|
33
|
+
- needs a real blocker review before closing a phase or delivering
|
|
34
|
+
|
|
35
|
+
## What it does not do
|
|
36
|
+
|
|
37
|
+
This skill does not:
|
|
38
|
+
|
|
39
|
+
- replace the `trackops quality ...` runtime
|
|
40
|
+
- invent checks or criteria outside the runtime
|
|
41
|
+
- soften blockers to make them look acceptable
|
|
42
|
+
- publish, deploy, or approve by itself
|
|
43
|
+
|
|
44
|
+
## Mandatory commands
|
|
45
|
+
|
|
46
|
+
- before closing a phase or declaring stability, run `trackops quality status`
|
|
47
|
+
- if the decision affects a phase, also run `trackops quality phase-readiness`
|
|
48
|
+
- after relevant code, environment, build, or smoke changes, run `trackops quality verify`
|
|
49
|
+
- before `trackops release`, run `trackops quality release-readiness`
|
|
50
|
+
- before recommending production, run `trackops quality promote-readiness --target production`
|
|
51
|
+
|
|
52
|
+
## Decision rules
|
|
53
|
+
|
|
54
|
+
- `phase-readiness` is advisory
|
|
55
|
+
- `release-readiness` decides whether release is allowed
|
|
56
|
+
- `promote-readiness` decides whether production can be recommended
|
|
57
|
+
- if the runtime blocks, do not invent exceptions
|
|
58
|
+
|
|
59
|
+
## Waiver policy
|
|
60
|
+
|
|
61
|
+
- only use waivers when there is explicit human approval
|
|
62
|
+
- a waiver must have an expiration
|
|
63
|
+
- a waiver does not erase evidence or turn a blocker into “nothing happened”
|
|
64
|
+
|
|
65
|
+
## Required output
|
|
66
|
+
|
|
67
|
+
Always answer in this exact order:
|
|
68
|
+
|
|
69
|
+
1. `Current state`
|
|
70
|
+
2. `Real blockers`
|
|
71
|
+
3. `Next action`
|
|
72
|
+
4. `Final decision`
|
|
73
|
+
|
|
74
|
+
## Which reference to read and when
|
|
75
|
+
|
|
76
|
+
- read `locales/en/references/commands.md` to decide which command to run
|
|
77
|
+
- read `locales/en/references/decision-policy.md` to interpret advisory vs hard gate
|
|
78
|
+
- read `locales/en/references/output-format.md` before replying when the answer may affect a release or production decision
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Commands
|
|
2
|
+
|
|
3
|
+
Use the `trackops quality ...` runtime as the single source of truth.
|
|
4
|
+
|
|
5
|
+
## Execution order
|
|
6
|
+
|
|
7
|
+
1. If the user wants a status check or phase close review:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
trackops quality status
|
|
11
|
+
trackops quality phase-readiness
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
2. If there were relevant code, environment, build, or smoke changes:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
trackops quality verify --scope all
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
3. If the decision affects release:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
trackops quality release-readiness
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
4. If the decision affects production:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
trackops quality promote-readiness --target production
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Rules
|
|
33
|
+
|
|
34
|
+
- do not replace these commands with subjective judgment
|
|
35
|
+
- if the user requests a specific scope, you may run `trackops quality verify --scope <scope>`
|
|
36
|
+
- if the runtime fails, report the failure before drawing conclusions
|