trackops 1.0.1 → 1.1.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 +326 -270
- package/bin/trackops.js +102 -70
- package/lib/config.js +260 -35
- package/lib/control.js +517 -475
- package/lib/env.js +227 -0
- package/lib/i18n.js +61 -53
- package/lib/init.js +135 -46
- package/lib/locale.js +63 -0
- package/lib/opera-bootstrap.js +523 -0
- package/lib/opera.js +319 -170
- package/lib/registry.js +27 -13
- package/lib/release.js +56 -0
- package/lib/resources.js +42 -0
- package/lib/server.js +907 -554
- package/lib/skills.js +148 -124
- package/lib/workspace.js +260 -0
- package/locales/en.json +331 -139
- package/locales/es.json +331 -139
- package/package.json +7 -9
- package/scripts/skills-marketplace-smoke.js +124 -0
- package/scripts/smoke-tests.js +445 -0
- package/scripts/sync-skill-version.js +21 -0
- package/scripts/validate-skill.js +88 -0
- package/skills/trackops/SKILL.md +64 -0
- package/skills/trackops/agents/openai.yaml +3 -0
- package/skills/trackops/references/activation.md +39 -0
- package/skills/trackops/references/troubleshooting.md +34 -0
- package/skills/trackops/references/workflow.md +20 -0
- package/skills/trackops/scripts/bootstrap-trackops.js +201 -0
- package/skills/trackops/skill.json +29 -0
- package/templates/opera/en/agent.md +26 -0
- package/templates/opera/en/genesis.md +79 -0
- package/templates/opera/en/references/autonomy-and-recovery.md +23 -0
- package/templates/opera/en/references/opera-cycle.md +62 -0
- package/templates/opera/en/registry.md +28 -0
- package/templates/opera/en/router.md +39 -0
- package/templates/opera/genesis.md +79 -94
- package/templates/skills/changelog-updater/locales/en/SKILL.md +11 -0
- package/templates/skills/commiter/locales/en/SKILL.md +11 -0
- package/templates/skills/project-starter-skill/locales/en/SKILL.md +24 -0
- package/ui/css/panels.css +956 -953
- package/ui/index.html +1 -1
- package/ui/js/api.js +211 -194
- package/ui/js/app.js +200 -199
- package/ui/js/i18n.js +14 -0
- package/ui/js/onboarding.js +439 -437
- package/ui/js/state.js +130 -129
- package/ui/js/utils.js +175 -172
- package/ui/js/views/board.js +255 -254
- package/ui/js/views/execution.js +256 -256
- package/ui/js/views/insights.js +340 -339
- package/ui/js/views/overview.js +365 -364
- package/ui/js/views/settings.js +340 -202
- package/ui/js/views/sidebar.js +131 -132
- package/ui/js/views/skills.js +163 -162
- package/ui/js/views/tasks.js +406 -405
- package/ui/js/views/topbar.js +239 -183
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Troubleshooting
|
|
2
|
+
|
|
3
|
+
## Missing prerequisites
|
|
4
|
+
|
|
5
|
+
- If Node is missing or older than 18, install Node 18+ first.
|
|
6
|
+
- If npm is missing, install a Node distribution that includes npm.
|
|
7
|
+
|
|
8
|
+
## skills cannot find the TrackOps skill
|
|
9
|
+
|
|
10
|
+
- Install from the repository root:
|
|
11
|
+
`npx skills add Baxahaun/trackops --skill trackops --full-depth --global --agent codex -y`
|
|
12
|
+
- Confirm the remote repository already contains the latest committed skill changes.
|
|
13
|
+
- Remember that skills installs from committed Git state, not from uncommitted local changes.
|
|
14
|
+
|
|
15
|
+
## Global npm install failed
|
|
16
|
+
|
|
17
|
+
- Re-run `node scripts/bootstrap-trackops.js` and inspect stderr.
|
|
18
|
+
- If npm global permissions are blocked, configure a user-writable npm prefix instead of relying on `sudo`.
|
|
19
|
+
|
|
20
|
+
## Runtime cannot be verified
|
|
21
|
+
|
|
22
|
+
If installation succeeds but `trackops` is still not executable:
|
|
23
|
+
|
|
24
|
+
- Check whether the npm global bin directory is on `PATH`.
|
|
25
|
+
- Re-open the terminal after updating shell profile settings.
|
|
26
|
+
- Re-run `node scripts/bootstrap-trackops.js` once `trackops --version` works.
|
|
27
|
+
|
|
28
|
+
## Workspace environment looks inconsistent
|
|
29
|
+
|
|
30
|
+
If a split workspace is active and tools do not see the expected environment file:
|
|
31
|
+
|
|
32
|
+
- Run `trackops env status` to inspect required, present, and missing keys without exposing values.
|
|
33
|
+
- Run `trackops env sync` to recreate `/.env`, `/.env.example`, and the `app/.env` bridge.
|
|
34
|
+
- If bridge mode is `copy`, do not edit `app/.env` directly; TrackOps regenerates it from the root `.env`.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Workflow
|
|
2
|
+
|
|
3
|
+
Once TrackOps is active in a repository, operate in this order:
|
|
4
|
+
|
|
5
|
+
1. Run `trackops status` to inspect focus, phase, blockers, and repo state.
|
|
6
|
+
2. Run `trackops next` to identify the next ready task.
|
|
7
|
+
3. Update task state with `trackops task ...` as work progresses.
|
|
8
|
+
4. Run `trackops sync` after meaningful changes so generated docs stay aligned.
|
|
9
|
+
5. Run `trackops env status` when the project depends on credentials or external services.
|
|
10
|
+
|
|
11
|
+
Operational rules:
|
|
12
|
+
|
|
13
|
+
- In split workspaces, use `ops/project_control.json` as the source of truth.
|
|
14
|
+
- In legacy repos, use `project_control.json` at repo root.
|
|
15
|
+
- In split workspaces, generated operational docs live under `ops/`.
|
|
16
|
+
- Product code lives under `app/`.
|
|
17
|
+
- Use `/.env` for real secrets and `/.env.example` for the public environment contract.
|
|
18
|
+
- `app/.env` is only a compatibility bridge.
|
|
19
|
+
- If OPERA is installed, use `ops/genesis.md`, `ops/.agent/hub/`, and `ops/.agents/skills/_registry.md` as managed framework artifacts.
|
|
20
|
+
- Keep the global skill layer separate from the local project layer.
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const os = require("os");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const { spawnSync } = require("child_process");
|
|
7
|
+
|
|
8
|
+
const EXIT_CODES = {
|
|
9
|
+
READY: 0,
|
|
10
|
+
PREREQ: 1,
|
|
11
|
+
INSTALL: 2,
|
|
12
|
+
UNVERIFIABLE: 3,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
function getNpmCommand() {
|
|
16
|
+
return process.platform === "win32" ? "npm.cmd" : "npm";
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function readSkillConfig() {
|
|
20
|
+
const skillFile = path.join(__dirname, "..", "skill.json");
|
|
21
|
+
return JSON.parse(fs.readFileSync(skillFile, "utf8"));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function getHomeDir() {
|
|
25
|
+
return process.env.TRACKOPS_BOOTSTRAP_HOME || os.homedir();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function getPrefixOverride() {
|
|
29
|
+
return process.env.TRACKOPS_BOOTSTRAP_PREFIX || null;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function getInstallSource(config) {
|
|
33
|
+
return process.env.TRACKOPS_BOOTSTRAP_INSTALL_SOURCE || `${config.npmPackage}@${config.trackopsVersion}`;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function parseMajor(version) {
|
|
37
|
+
const major = Number(String(version || "").split(".")[0]);
|
|
38
|
+
return Number.isFinite(major) ? major : null;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function hasSupportedNode() {
|
|
42
|
+
const major = parseMajor(process.versions.node);
|
|
43
|
+
return major != null && major >= 18;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function spawnChecked(command, args, extra = {}) {
|
|
47
|
+
const shell = process.platform === "win32" && /\.(cmd|bat)$/i.test(command);
|
|
48
|
+
return spawnSync(command, args, {
|
|
49
|
+
encoding: "utf8",
|
|
50
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
51
|
+
shell,
|
|
52
|
+
...extra,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function spawnNpm(args, extra = {}) {
|
|
57
|
+
return spawnSync(getNpmCommand(), args, {
|
|
58
|
+
encoding: "utf8",
|
|
59
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
60
|
+
shell: process.platform === "win32",
|
|
61
|
+
...extra,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function resolvePrefixExecutables(prefix) {
|
|
66
|
+
if (!prefix) return [];
|
|
67
|
+
if (process.platform === "win32") {
|
|
68
|
+
return [
|
|
69
|
+
path.join(prefix, "trackops.cmd"),
|
|
70
|
+
path.join(prefix, "trackops.exe"),
|
|
71
|
+
path.join(prefix, "trackops"),
|
|
72
|
+
];
|
|
73
|
+
}
|
|
74
|
+
return [path.join(prefix, "bin", "trackops")];
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function buildVerificationTargets(prefix) {
|
|
78
|
+
const targets = [{ command: "trackops", via: "path" }];
|
|
79
|
+
for (const candidate of resolvePrefixExecutables(prefix)) {
|
|
80
|
+
targets.push({ command: candidate, via: "prefix" });
|
|
81
|
+
}
|
|
82
|
+
return targets;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function readInstalledVersion(prefix) {
|
|
86
|
+
for (const target of buildVerificationTargets(prefix)) {
|
|
87
|
+
const result = spawnChecked(target.command, ["--version"]);
|
|
88
|
+
if (result.error || result.status !== 0) continue;
|
|
89
|
+
const version = String(result.stdout || "").trim();
|
|
90
|
+
if (version) {
|
|
91
|
+
return { version, command: target.command, via: target.via };
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function verifyRuntime(expectedVersion, prefix) {
|
|
98
|
+
const installed = readInstalledVersion(prefix);
|
|
99
|
+
if (!installed) {
|
|
100
|
+
return { ok: false, reason: "missing-command" };
|
|
101
|
+
}
|
|
102
|
+
if (installed.version !== expectedVersion) {
|
|
103
|
+
return { ok: false, reason: "version-drift", installed };
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const help = spawnChecked(installed.command, ["help"]);
|
|
107
|
+
if (help.error || help.status !== 0) {
|
|
108
|
+
return { ok: false, reason: "help-failed", installed };
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return { ok: true, installed };
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function ensureNpmAvailable() {
|
|
115
|
+
const result = spawnNpm(["--version"]);
|
|
116
|
+
return !result.error && result.status === 0;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function runInstall(config, prefix) {
|
|
120
|
+
const installSource = getInstallSource(config);
|
|
121
|
+
const args = ["install", "-g"];
|
|
122
|
+
if (prefix) {
|
|
123
|
+
args.push("--prefix", prefix);
|
|
124
|
+
}
|
|
125
|
+
args.push(installSource);
|
|
126
|
+
|
|
127
|
+
const result = spawnNpm(args);
|
|
128
|
+
return { ...result, installSource };
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function writeRuntimeStamp(config, verification) {
|
|
132
|
+
const runtimeDir = path.join(getHomeDir(), ".trackops");
|
|
133
|
+
const runtimeFile = path.join(runtimeDir, "runtime.json");
|
|
134
|
+
fs.mkdirSync(runtimeDir, { recursive: true });
|
|
135
|
+
const payload = {
|
|
136
|
+
skill: config.name,
|
|
137
|
+
skillVersion: config.skillVersion,
|
|
138
|
+
runtimePackage: config.npmPackage,
|
|
139
|
+
runtimeVersion: config.trackopsVersion,
|
|
140
|
+
bootstrapPolicy: config.bootstrapPolicy,
|
|
141
|
+
supportedAgentsV1: config.supportedAgentsV1,
|
|
142
|
+
verifiedAt: new Date().toISOString(),
|
|
143
|
+
verifiedWith: verification.installed.via,
|
|
144
|
+
executable: verification.installed.command,
|
|
145
|
+
};
|
|
146
|
+
fs.writeFileSync(runtimeFile, `${JSON.stringify(payload, null, 2)}\n`, "utf8");
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function printInstallGuidance(prefix) {
|
|
150
|
+
if (prefix) {
|
|
151
|
+
console.error(`TrackOps was installed under the custom prefix '${prefix}'.`);
|
|
152
|
+
console.error("Use that prefix's executable or add it to PATH before trying again.");
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
console.error("TrackOps was installed but could not be executed from PATH.");
|
|
157
|
+
console.error("Add your npm global bin directory to PATH, reopen the terminal, and retry.");
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function main() {
|
|
161
|
+
const config = readSkillConfig();
|
|
162
|
+
const prefix = getPrefixOverride();
|
|
163
|
+
|
|
164
|
+
if (!hasSupportedNode()) {
|
|
165
|
+
console.error("TrackOps requires Node.js 18 or newer.");
|
|
166
|
+
process.exit(EXIT_CODES.PREREQ);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (!ensureNpmAvailable()) {
|
|
170
|
+
console.error("npm is required to bootstrap the TrackOps runtime.");
|
|
171
|
+
process.exit(EXIT_CODES.PREREQ);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
const current = verifyRuntime(config.trackopsVersion, prefix);
|
|
175
|
+
if (current.ok) {
|
|
176
|
+
writeRuntimeStamp(config, current);
|
|
177
|
+
console.log(`TrackOps runtime ${config.trackopsVersion} is already ready.`);
|
|
178
|
+
process.exit(EXIT_CODES.READY);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const install = runInstall(config, prefix);
|
|
182
|
+
if (install.error || install.status !== 0) {
|
|
183
|
+
console.error(`Failed to install ${install.installSource}.`);
|
|
184
|
+
if (install.stderr) {
|
|
185
|
+
console.error(install.stderr.trim());
|
|
186
|
+
}
|
|
187
|
+
process.exit(EXIT_CODES.INSTALL);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
const verification = verifyRuntime(config.trackopsVersion, prefix);
|
|
191
|
+
if (!verification.ok) {
|
|
192
|
+
printInstallGuidance(prefix);
|
|
193
|
+
process.exit(EXIT_CODES.UNVERIFIABLE);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
writeRuntimeStamp(config, verification);
|
|
197
|
+
console.log(`TrackOps runtime ${config.trackopsVersion} is ready.`);
|
|
198
|
+
process.exit(EXIT_CODES.READY);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
main();
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "trackops",
|
|
3
|
+
"shortDescription": "Global TrackOps skill for local project orchestration and operational automation with AI agents.",
|
|
4
|
+
"description": "Installs TrackOps as a global skill, prepares your agent for local project orchestration, ensures the runtime on first use, and guides per-project activation with optional OPERA.",
|
|
5
|
+
"skillVersion": "1.1.0",
|
|
6
|
+
"trackopsVersion": "1.1.0",
|
|
7
|
+
"npmPackage": "trackops",
|
|
8
|
+
"bootstrapPolicy": "first_use",
|
|
9
|
+
"supportedAgentsV1": [
|
|
10
|
+
"antigravity",
|
|
11
|
+
"claude-code",
|
|
12
|
+
"codex",
|
|
13
|
+
"cursor",
|
|
14
|
+
"gemini-cli",
|
|
15
|
+
"github-copilot",
|
|
16
|
+
"kiro-cli"
|
|
17
|
+
],
|
|
18
|
+
"distribution": {
|
|
19
|
+
"source": "Baxahaun/trackops",
|
|
20
|
+
"skill": "trackops",
|
|
21
|
+
"fullDepth": true
|
|
22
|
+
},
|
|
23
|
+
"repository": {
|
|
24
|
+
"provider": "github",
|
|
25
|
+
"owner": "Baxahaun",
|
|
26
|
+
"repo": "trackops",
|
|
27
|
+
"skillPath": "skills/trackops"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Project Agent: {{PROJECT_NAME}}
|
|
2
|
+
|
|
3
|
+
## Identity
|
|
4
|
+
You are the primary agent for **{{PROJECT_NAME}}**. You operate under the O.P.E.R.A. v3.0 protocol.
|
|
5
|
+
|
|
6
|
+
## Source of Truth
|
|
7
|
+
Your source of truth is `genesis.md`. Before making any architectural or implementation decision, read it first.
|
|
8
|
+
For operational tracking and backlog state, use `project_control.json`.
|
|
9
|
+
|
|
10
|
+
## Behavior
|
|
11
|
+
- Follow the behavior rules defined in `genesis.md`.
|
|
12
|
+
- Respect the autonomy matrix to determine which actions are allowed.
|
|
13
|
+
- Manage tasks and states from `project_control.json`.
|
|
14
|
+
- Do not edit `task_plan.md`, `progress.md`, or `findings.md` manually; regenerate them with `trackops sync`.
|
|
15
|
+
|
|
16
|
+
## Available Skills
|
|
17
|
+
Check `.agents/skills/_registry.md` to see installed skills.
|
|
18
|
+
You can also discover new skills with `trackops skill catalog`.
|
|
19
|
+
|
|
20
|
+
## Work Cycle
|
|
21
|
+
1. Run `trackops status` at the beginning of each work block.
|
|
22
|
+
2. Read `genesis.md` to understand the data and rules.
|
|
23
|
+
3. Use `trackops next` to inspect the prioritized queue.
|
|
24
|
+
4. Before implementing, mark the task with `trackops task start <task-id>`.
|
|
25
|
+
5. Use the router in `.agent/hub/router.md` to choose the right skill.
|
|
26
|
+
6. When you finish, move the task to `review`, `complete`, or `block`, then run `trackops sync`.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# {{PROJECT_NAME}} — Genesis
|
|
2
|
+
|
|
3
|
+
> **The Constitution of the project.** This document is the source of truth. Before making any architectural or implementation decision, consult this file. If a script contradicts what is defined here, the script is wrong.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Desired Outcome
|
|
8
|
+
|
|
9
|
+
_What is the single desired outcome of this project?_
|
|
10
|
+
|
|
11
|
+
> {{DESIRED_OUTCOME}}
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 2. External Integrations
|
|
16
|
+
|
|
17
|
+
_Which external services do we need? Are credentials ready?_
|
|
18
|
+
|
|
19
|
+
| Service | Status | Key / Config |
|
|
20
|
+
|---------|--------|--------------|
|
|
21
|
+
{{SERVICES_TABLE}}
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 3. Source of Truth
|
|
26
|
+
|
|
27
|
+
_Where does the primary data live?_
|
|
28
|
+
|
|
29
|
+
> {{SOURCE_OF_TRUTH}}
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 4. Payload
|
|
34
|
+
|
|
35
|
+
_How and where should the final result be delivered?_
|
|
36
|
+
|
|
37
|
+
> {{PAYLOAD}}
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 5. Behavior Rules
|
|
42
|
+
|
|
43
|
+
_Domain constraints, tone, and specific rules._
|
|
44
|
+
|
|
45
|
+
{{BEHAVIOR_RULES}}
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Data Schema
|
|
50
|
+
|
|
51
|
+
> **Data-first rule**: this schema must exist before any code is written.
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{{DATA_SCHEMA}}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Architectural Invariants
|
|
60
|
+
|
|
61
|
+
_Non-negotiable technical decisions. Changing them requires explicit approval._
|
|
62
|
+
|
|
63
|
+
{{ARCHITECTURAL_INVARIANTS}}
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Pipeline
|
|
68
|
+
|
|
69
|
+
_Document the dependency graph between tools._
|
|
70
|
+
|
|
71
|
+
{{PIPELINE_ITEMS}}
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Templates
|
|
76
|
+
|
|
77
|
+
_References to output templates defined under `templates/`._
|
|
78
|
+
|
|
79
|
+
{{TEMPLATE_ITEMS}}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Autonomy and Recovery
|
|
2
|
+
|
|
3
|
+
Use this reference to decide when the agent can continue autonomously and when it must stop for confirmation.
|
|
4
|
+
|
|
5
|
+
## Red level
|
|
6
|
+
|
|
7
|
+
Ask for confirmation before:
|
|
8
|
+
- Changing `genesis.md` in a way that alters the contract.
|
|
9
|
+
- Deleting persistent data.
|
|
10
|
+
- Creating repositories or external resources.
|
|
11
|
+
- Deploying to production.
|
|
12
|
+
|
|
13
|
+
## Green level
|
|
14
|
+
|
|
15
|
+
Proceed autonomously for:
|
|
16
|
+
- Reading and editing local source files.
|
|
17
|
+
- Running tests and checks.
|
|
18
|
+
- Updating operational docs.
|
|
19
|
+
- Repairing deterministic errors after a bounded number of attempts.
|
|
20
|
+
|
|
21
|
+
## Recovery rule
|
|
22
|
+
|
|
23
|
+
If a later phase invalidates an earlier decision, document the proposed change first, request approval, and only then update `genesis.md` and the operational record.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# The O.P.E.R.A. Cycle — Complete Reference
|
|
2
|
+
|
|
3
|
+
This document describes each phase, its rules, its procedures, and its Definition of Done.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## O — Orchestrate
|
|
8
|
+
|
|
9
|
+
Answer the five discovery questions, define the input/output schema in `genesis.md`, document behavior rules, and make sure the plan is approved before moving forward.
|
|
10
|
+
|
|
11
|
+
### Definition of Done
|
|
12
|
+
- [ ] Discovery questions answered.
|
|
13
|
+
- [ ] Input/output schema defined in `genesis.md`.
|
|
14
|
+
- [ ] Behavior rules documented in `genesis.md`.
|
|
15
|
+
- [ ] `task_plan.md` reviewed and accepted.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## P — Prove
|
|
20
|
+
|
|
21
|
+
Validate credentials, run minimal connectivity checks, and confirm that external systems return data that matches the schema in `genesis.md`.
|
|
22
|
+
|
|
23
|
+
### Definition of Done
|
|
24
|
+
- [ ] Required credentials verified.
|
|
25
|
+
- [ ] Connectivity tests executed and passing.
|
|
26
|
+
- [ ] Response shapes validated against `genesis.md`.
|
|
27
|
+
- [ ] Findings documented.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## E — Establish
|
|
32
|
+
|
|
33
|
+
Build the three-layer structure: SOPs in `architecture/`, atomic tools in `tools/`, and explicit dependency flow in `genesis.md`.
|
|
34
|
+
|
|
35
|
+
### Definition of Done
|
|
36
|
+
- [ ] SOPs written.
|
|
37
|
+
- [ ] Tools implemented.
|
|
38
|
+
- [ ] Dependency graph documented.
|
|
39
|
+
- [ ] Integration tests passing.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## R — Refine
|
|
44
|
+
|
|
45
|
+
Validate outputs against templates and ensure delivery formats match the expected payload.
|
|
46
|
+
|
|
47
|
+
### Definition of Done
|
|
48
|
+
- [ ] Outputs validated against templates.
|
|
49
|
+
- [ ] Delivery formats reviewed.
|
|
50
|
+
- [ ] UI review completed when applicable.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## A — Automate
|
|
55
|
+
|
|
56
|
+
Clean temporary artifacts, configure triggers, deploy the final logic, and run a smoke test in the target environment.
|
|
57
|
+
|
|
58
|
+
### Definition of Done
|
|
59
|
+
- [ ] `.tmp/` cleaned.
|
|
60
|
+
- [ ] Deployment completed.
|
|
61
|
+
- [ ] Triggers configured.
|
|
62
|
+
- [ ] Smoke test passing.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Skills Registry — {{PROJECT_NAME}}
|
|
2
|
+
|
|
3
|
+
> Index of installed skills in this project. Managed automatically by `trackops skill`.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Installed Skills
|
|
8
|
+
|
|
9
|
+
_No skills installed yet. Use `trackops skill install <name>` to add one._
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## How to Use a Skill
|
|
14
|
+
|
|
15
|
+
1. Identify the context in `.agent/hub/router.md`.
|
|
16
|
+
2. Open the corresponding `SKILL.md`.
|
|
17
|
+
3. Follow the workflow defined in that skill.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Management
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
trackops skill list
|
|
25
|
+
trackops skill catalog
|
|
26
|
+
trackops skill install <name>
|
|
27
|
+
trackops skill remove <name>
|
|
28
|
+
```
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Skills Router
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
This file defines the routing rules between the main agent and the available skills. When the agent detects a specific context, it should consult these rules and choose the right skill.
|
|
5
|
+
|
|
6
|
+
## Routing Rules
|
|
7
|
+
|
|
8
|
+
### Context: Code commit
|
|
9
|
+
- **Trigger**: The user asks for a commit or a code change has just been completed.
|
|
10
|
+
- **Skill**: `commiter`
|
|
11
|
+
- **Action**: Use the skill to format the commit message.
|
|
12
|
+
|
|
13
|
+
### Context: Post-commit
|
|
14
|
+
- **Trigger**: A successful commit has just happened.
|
|
15
|
+
- **Skill**: `changelog-updater`
|
|
16
|
+
- **Action**: Run the changelog update flow.
|
|
17
|
+
|
|
18
|
+
### Context: Project initialization
|
|
19
|
+
- **Trigger**: The user wants to create a new project.
|
|
20
|
+
- **Skill**: `project-starter-skill` (global)
|
|
21
|
+
- **Action**: Run the full initialization protocol.
|
|
22
|
+
|
|
23
|
+
### Context: Operational tracking
|
|
24
|
+
- **Trigger**: A work block is about to start, resume, or close.
|
|
25
|
+
- **Skill**: No external skill.
|
|
26
|
+
- **Action**: Run `trackops status`, take the next task with `trackops next`, and keep `project_control.json` as the operational source of truth.
|
|
27
|
+
|
|
28
|
+
## Adding New Rules
|
|
29
|
+
|
|
30
|
+
Use this format for each new rule:
|
|
31
|
+
|
|
32
|
+
```markdown
|
|
33
|
+
### Context: [description]
|
|
34
|
+
- **Trigger**: [what activates the rule]
|
|
35
|
+
- **Skill**: [skill name]
|
|
36
|
+
- **Action**: [what the agent should do]
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
When a new skill is installed with `trackops skill install <name>`, add its routing rule here.
|