@sentropic/track 0.85.15 → 0.85.17
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/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +119 -29
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/install-skills.d.ts.map +1 -1
- package/dist/cli/install-skills.js +8 -6
- package/dist/cli/install-skills.js.map +1 -1
- package/dist/mcp/server.d.ts +25 -2
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +30 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/read/contract.d.ts +3 -0
- package/dist/read/contract.d.ts.map +1 -1
- package/dist/read/contract.js +5 -0
- package/dist/read/contract.js.map +1 -1
- package/dist/read/index.d.ts +1 -0
- package/dist/read/index.d.ts.map +1 -1
- package/dist/read/index.js +1 -0
- package/dist/read/index.js.map +1 -1
- package/dist/report/ai-report.d.ts +122 -0
- package/dist/report/ai-report.d.ts.map +1 -0
- package/dist/report/ai-report.js +720 -0
- package/dist/report/ai-report.js.map +1 -0
- package/dist/report/build.d.ts +1 -1
- package/dist/report/build.d.ts.map +1 -1
- package/dist/report/build.js +6 -6
- package/dist/report/build.js.map +1 -1
- package/dist/report/directive.d.ts +1 -1
- package/dist/report/directive.d.ts.map +1 -1
- package/dist/report/directive.js +9 -9
- package/dist/report/directive.js.map +1 -1
- package/dist/report/index.d.ts +2 -0
- package/dist/report/index.d.ts.map +1 -1
- package/dist/report/index.js +2 -0
- package/dist/report/index.js.map +1 -1
- package/dist/report/rollup.d.ts +1 -1
- package/dist/report/rollup.d.ts.map +1 -1
- package/dist/report/rollup.js +3 -3
- package/dist/report/rollup.js.map +1 -1
- package/dist/report/snapshot.d.ts +67 -0
- package/dist/report/snapshot.d.ts.map +1 -0
- package/dist/report/snapshot.js +203 -0
- package/dist/report/snapshot.js.map +1 -0
- package/package.json +1 -1
- package/skills/track-operation/SKILL.md +23 -18
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { canonicalize } from '../events/canonical.js';
|
|
2
|
+
import { fold } from '../state/fold.js';
|
|
3
|
+
import { buildReport, } from './build.js';
|
|
4
|
+
import { buildDirectives } from './directive.js';
|
|
5
|
+
import { directivePhrase, wpTotals } from './format.js';
|
|
6
|
+
export const SNAPSHOT_SCHEMA = 'track.snapshot/v1';
|
|
7
|
+
export const SNAPSHOT_EVENT_LIMIT = 200;
|
|
8
|
+
/** Locale/ICU-independent JS UTF-16 code-unit ordering for canonical snapshot arrays. */
|
|
9
|
+
export function ordinalCompare(a, b) {
|
|
10
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
11
|
+
}
|
|
12
|
+
function stableWpTree(tree) {
|
|
13
|
+
return tree
|
|
14
|
+
.map((node) => ({
|
|
15
|
+
...node,
|
|
16
|
+
leaves: [...node.leaves].sort((a, b) => ordinalCompare(a.id, b.id)),
|
|
17
|
+
children: stableWpTree(node.children),
|
|
18
|
+
}))
|
|
19
|
+
.sort((a, b) => ordinalCompare(a.id, b.id));
|
|
20
|
+
}
|
|
21
|
+
function stableReport(report) {
|
|
22
|
+
const tree = stableWpTree(report.wpTree ?? []);
|
|
23
|
+
return {
|
|
24
|
+
buckets: {
|
|
25
|
+
AWAITED: [...report.buckets.AWAITED].sort((a, b) => ordinalCompare(a.id, b.id)),
|
|
26
|
+
DROPPED: [...report.buckets.DROPPED].sort((a, b) => ordinalCompare(a.id, b.id)),
|
|
27
|
+
DONE: [...report.buckets.DONE].sort((a, b) => ordinalCompare(a.id, b.id)),
|
|
28
|
+
'TO-DO': [...report.buckets['TO-DO']].sort((a, b) => ordinalCompare(a.id, b.id)),
|
|
29
|
+
},
|
|
30
|
+
decisions: [...(report.decisions ?? [])].sort((a, b) => ordinalCompare(a.id, b.id)),
|
|
31
|
+
wpTree: tree,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function projectRow(row) {
|
|
35
|
+
return {
|
|
36
|
+
id: row.id,
|
|
37
|
+
title: row.title,
|
|
38
|
+
kind: row.kind,
|
|
39
|
+
workspace: row.workspace,
|
|
40
|
+
bucket: row.bucket,
|
|
41
|
+
realization: row.realization,
|
|
42
|
+
acceptance: row.acceptance,
|
|
43
|
+
...(row.priority !== undefined ? { priority: row.priority } : {}),
|
|
44
|
+
...(row.accountable !== undefined ? { accountable: row.accountable } : {}),
|
|
45
|
+
...(row.engagementRef !== undefined ? { engagementRef: row.engagementRef } : {}),
|
|
46
|
+
...(row.role !== undefined ? { role: row.role } : {}),
|
|
47
|
+
...(row.wpId !== undefined ? { wpId: row.wpId } : {}),
|
|
48
|
+
...(row.wpLabel !== undefined ? { wpLabel: row.wpLabel } : {}),
|
|
49
|
+
detail: { acceptanceLabel: row.detail.acceptanceLabel },
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function projectDecision(decision) {
|
|
53
|
+
return {
|
|
54
|
+
id: decision.id,
|
|
55
|
+
title: decision.title,
|
|
56
|
+
workspace: decision.workspace,
|
|
57
|
+
decisionKind: decision.decisionKind,
|
|
58
|
+
realization: decision.realization,
|
|
59
|
+
outcome: decision.outcome,
|
|
60
|
+
...(decision.accountable !== undefined ? { accountable: decision.accountable } : {}),
|
|
61
|
+
...(decision.optionCount !== undefined ? { optionCount: decision.optionCount } : {}),
|
|
62
|
+
...(decision.openQuestionCount !== undefined ? { openQuestionCount: decision.openQuestionCount } : {}),
|
|
63
|
+
...(decision.hasRecommendation !== undefined ? { hasRecommendation: decision.hasRecommendation } : {}),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function projectBlocker(blocker) {
|
|
67
|
+
return {
|
|
68
|
+
blockerId: blocker.blockerId,
|
|
69
|
+
kind: blocker.kind,
|
|
70
|
+
reason: blocker.reason,
|
|
71
|
+
...(blocker.ref !== undefined ? { ref: blocker.ref } : {}),
|
|
72
|
+
...(blocker.scope !== undefined ? { scope: blocker.scope } : {}),
|
|
73
|
+
...(blocker.resolutionRule !== undefined ? { resolutionRule: blocker.resolutionRule } : {}),
|
|
74
|
+
...(blocker.engagementRef !== undefined ? { engagementRef: blocker.engagementRef } : {}),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function projectLeaf(leaf) {
|
|
78
|
+
return {
|
|
79
|
+
id: leaf.id,
|
|
80
|
+
title: leaf.title,
|
|
81
|
+
bucket: leaf.bucket,
|
|
82
|
+
kind: leaf.kind,
|
|
83
|
+
workspace: leaf.workspace,
|
|
84
|
+
realization: leaf.realization,
|
|
85
|
+
acceptance: leaf.acceptance,
|
|
86
|
+
specStatus: leaf.specStatus,
|
|
87
|
+
openBlockers: leaf.openBlockers.map(projectBlocker),
|
|
88
|
+
...(leaf.priority !== undefined ? { priority: leaf.priority } : {}),
|
|
89
|
+
...(leaf.accountable !== undefined ? { accountable: leaf.accountable } : {}),
|
|
90
|
+
...(leaf.engagementRef !== undefined ? { engagementRef: leaf.engagementRef } : {}),
|
|
91
|
+
...(leaf.awaitedOnDecision !== undefined ? { awaitedOnDecision: leaf.awaitedOnDecision } : {}),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
function projectNode(node) {
|
|
95
|
+
return {
|
|
96
|
+
id: node.id,
|
|
97
|
+
title: node.title,
|
|
98
|
+
label: node.label,
|
|
99
|
+
done: node.done,
|
|
100
|
+
active: node.active,
|
|
101
|
+
dropped: node.dropped,
|
|
102
|
+
pct: node.pct,
|
|
103
|
+
leaves: node.leaves.map(projectLeaf),
|
|
104
|
+
children: node.children.map(projectNode),
|
|
105
|
+
...(node.code !== undefined ? { code: node.code } : {}),
|
|
106
|
+
...(node.role !== undefined ? { role: node.role } : {}),
|
|
107
|
+
...(node.terminal !== undefined ? { terminal: node.terminal } : {}),
|
|
108
|
+
...(node.partial !== undefined ? { partial: node.partial } : {}),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function projectReport(report) {
|
|
112
|
+
return {
|
|
113
|
+
buckets: {
|
|
114
|
+
AWAITED: report.buckets.AWAITED.map(projectRow),
|
|
115
|
+
DROPPED: report.buckets.DROPPED.map(projectRow),
|
|
116
|
+
DONE: report.buckets.DONE.map(projectRow),
|
|
117
|
+
'TO-DO': report.buckets['TO-DO'].map(projectRow),
|
|
118
|
+
},
|
|
119
|
+
decisions: (report.decisions ?? []).map(projectDecision),
|
|
120
|
+
wpTree: (report.wpTree ?? []).map(projectNode),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* A deliberately narrow event summary. Never copy arbitrary prose-bearing payload fields: the event kind,
|
|
125
|
+
* aggregate id, and append position already carry the useful change signal for the AI context.
|
|
126
|
+
*/
|
|
127
|
+
function recentEvents(events) {
|
|
128
|
+
const start = Math.max(0, events.length - SNAPSHOT_EVENT_LIMIT);
|
|
129
|
+
return events.slice(start).map((event, offset) => ({
|
|
130
|
+
position: start + offset + 1,
|
|
131
|
+
eventId: event.id,
|
|
132
|
+
kind: event.type,
|
|
133
|
+
aggregateId: event.aggregateId,
|
|
134
|
+
}));
|
|
135
|
+
}
|
|
136
|
+
export function buildSnapshot(events, options) {
|
|
137
|
+
const report = stableReport(buildReport(fold(events), {
|
|
138
|
+
baselineCommit: options.resolvedCommit,
|
|
139
|
+
requireAccepted: options.requireAccepted ?? false,
|
|
140
|
+
decisions: true,
|
|
141
|
+
wpTree: true,
|
|
142
|
+
activeRoster: false,
|
|
143
|
+
}, ordinalCompare));
|
|
144
|
+
const directives = buildDirectives(report.wpTree ?? [], report.decisions ?? [], ordinalCompare)
|
|
145
|
+
.map((directive) => ({
|
|
146
|
+
id: directive.id,
|
|
147
|
+
source: 'rule-derived',
|
|
148
|
+
kind: directive.step.code,
|
|
149
|
+
aggregateId: directive.target.id,
|
|
150
|
+
text: directivePhrase(directive),
|
|
151
|
+
}))
|
|
152
|
+
.sort((a, b) => ordinalCompare(a.id, b.id));
|
|
153
|
+
return {
|
|
154
|
+
schema: SNAPSHOT_SCHEMA,
|
|
155
|
+
baseline: { input: options.baselineInput, resolvedCommit: options.resolvedCommit },
|
|
156
|
+
report: projectReport(report),
|
|
157
|
+
wpTotals: wpTotals(report.wpTree ?? []),
|
|
158
|
+
directives,
|
|
159
|
+
recentEvents: recentEvents(events),
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
export function snapshotJson(snapshot) {
|
|
163
|
+
return `${canonicalize(snapshot)}\n`;
|
|
164
|
+
}
|
|
165
|
+
function clean(value) {
|
|
166
|
+
return value
|
|
167
|
+
.replace(/[\u0000-\u001f\u007f-\u009f\u2028\u2029\u202a-\u202e\u2066-\u2069]/gu, ' ')
|
|
168
|
+
.replace(/\s+/gu, ' ')
|
|
169
|
+
.trim();
|
|
170
|
+
}
|
|
171
|
+
function markdown(value) {
|
|
172
|
+
return clean(value).replace(/([\\`*_{}\[\]()#+\-.!|<>~])/gu, '\\$1');
|
|
173
|
+
}
|
|
174
|
+
export function snapshotDiagnostic(snapshot, format) {
|
|
175
|
+
const h = (value) => (format === 'md' ? `## ${value}` : value);
|
|
176
|
+
const esc = format === 'md' ? markdown : clean;
|
|
177
|
+
const lines = [
|
|
178
|
+
format === 'md' ? '# Track factual snapshot' : 'TRACK FACTUAL SNAPSHOT',
|
|
179
|
+
`schema: ${snapshot.schema}`,
|
|
180
|
+
`baseline: ${esc(snapshot.baseline.resolvedCommit)}`,
|
|
181
|
+
'',
|
|
182
|
+
h('BUCKETS'),
|
|
183
|
+
`AWAITED ${snapshot.report.buckets.AWAITED.length} · DROPPED ${snapshot.report.buckets.DROPPED.length} · DONE ${snapshot.report.buckets.DONE.length} · TO-DO ${snapshot.report.buckets['TO-DO'].length}`,
|
|
184
|
+
'',
|
|
185
|
+
h('RULE-DERIVED FACTS (NOT AI ADVICE)'),
|
|
186
|
+
];
|
|
187
|
+
for (const directive of snapshot.directives) {
|
|
188
|
+
lines.push(`- [${esc(directive.kind)}] ${esc(directive.text)} (${esc(directive.id)})`);
|
|
189
|
+
}
|
|
190
|
+
if (snapshot.directives.length === 0)
|
|
191
|
+
lines.push('- none');
|
|
192
|
+
lines.push('', h('RECENT EVENTS'));
|
|
193
|
+
for (const event of snapshot.recentEvents) {
|
|
194
|
+
lines.push(`- #${event.position} ${esc(event.kind)} · ${esc(event.aggregateId ?? '-')}`);
|
|
195
|
+
}
|
|
196
|
+
if (snapshot.recentEvents.length === 0)
|
|
197
|
+
lines.push('- none');
|
|
198
|
+
return `${lines.join('\n').trimEnd()}\n`;
|
|
199
|
+
}
|
|
200
|
+
export function renderSnapshot(snapshot, format) {
|
|
201
|
+
return format === 'json' ? snapshotJson(snapshot) : snapshotDiagnostic(snapshot, format);
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/report/snapshot.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: track-operation
|
|
3
|
-
description: "Use when the user asks for a track report,
|
|
3
|
+
description: "Use when the user asks for a track report, status, or advancement/progress report — run the CLI `track report` from the repo root and return its AI-prepared, cited output verbatim; never substitute the deterministic `track_report` MCP projection for a human AI report. Also use when an agent needs to read, update, import, or verify track state; when a BRANCH.md or plan/NN-BRANCH_*.md changed; or when deciding between Track MCP and CLI. MCP remains read-only, writes/imports use the CLI, and .track is append-only/single-writer."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Track Operation
|
|
@@ -9,17 +9,21 @@ Use this for ordinary track hygiene: reading status, importing BRANCH files, rec
|
|
|
9
9
|
updates, and verifying that the sidecar is current. This is the general operational skill; use
|
|
10
10
|
`present-decision` for human decision dossiers and `propose-workpackages` for backlog restructuring.
|
|
11
11
|
|
|
12
|
-
## Human report/status — DO THIS FIRST
|
|
12
|
+
## Human AI report/status — DO THIS FIRST
|
|
13
13
|
|
|
14
14
|
For ANY human-facing track report or status (including "fais-moi un track report", "un track report",
|
|
15
|
-
"a status", "an advancement/progress report"): run the CLI `track report` (
|
|
16
|
-
`track report --format md`) from the repo root and
|
|
17
|
-
|
|
18
|
-
- NEVER call the `track_report` MCP tool to render a human report
|
|
19
|
-
|
|
20
|
-
- NEVER
|
|
21
|
-
- `track report
|
|
22
|
-
|
|
15
|
+
"a status", "an advancement/progress report"): run the CLI `track report` (or
|
|
16
|
+
`track report --format md`) from the repo root and paste its AI-prepared, cited output verbatim.
|
|
17
|
+
|
|
18
|
+
- NEVER call the `track_report` MCP tool to render a human AI report. It is the frozen legacy,
|
|
19
|
+
deterministic projection; `track_snapshot` is the canonical factual context projection.
|
|
20
|
+
- NEVER invent a report by interpreting MCP JSON or snapshot facts yourself.
|
|
21
|
+
- If `track report` fails because no adapter is configured, times out, or returns invalid output, say that
|
|
22
|
+
the AI report is unavailable and preserve the command's honest error. You MAY run
|
|
23
|
+
`track snapshot --format text`, but label it exactly as a **factual snapshot (not an AI report)**. Do not
|
|
24
|
+
turn rule-derived snapshot directives into AI advice.
|
|
25
|
+
- `--wp`, `--flat`, `--decisions`, and `--active-roster` are emphasis/context controls for the AI adapter;
|
|
26
|
+
they no longer select a deterministic human renderer.
|
|
23
27
|
|
|
24
28
|
## Contract
|
|
25
29
|
|
|
@@ -54,7 +58,7 @@ When progress is represented by a `BRANCH.md` or `plan/NN-BRANCH_*.md` file:
|
|
|
54
58
|
3. Verify immediately:
|
|
55
59
|
|
|
56
60
|
```bash
|
|
57
|
-
track
|
|
61
|
+
track snapshot --format text
|
|
58
62
|
track validate
|
|
59
63
|
```
|
|
60
64
|
|
|
@@ -75,13 +79,14 @@ Use direct CLI writes only for the event they actually represent:
|
|
|
75
79
|
|
|
76
80
|
Report track results from the verified state, not from memory:
|
|
77
81
|
|
|
78
|
-
- Use `track report --format text` for human status
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
82
|
+
- Use `track report --format text` for a human AI status and paste its raw, cited output verbatim.
|
|
83
|
+
- Use `track report --format md` when Markdown is explicitly useful, and `--wp` or `--flat` only to request
|
|
84
|
+
a workpackage or flat emphasis from the adapter.
|
|
85
|
+
- Use `track snapshot` or the exact alias `track report --raw` for canonical deterministic facts. Its text
|
|
86
|
+
and Markdown renderers are diagnostics; always label them **factual snapshot (not an AI report)** when
|
|
87
|
+
returning them to a human.
|
|
88
|
+
- `track report --format json` and the MCP `track_report` tool remain frozen legacy compatibility surfaces;
|
|
89
|
+
do not present either as the new human AI report.
|
|
85
90
|
- Mention if `.track/` was intentionally not written because the current checkout is not the designated
|
|
86
91
|
writer.
|
|
87
92
|
|