create-tradejs 3.1.22 → 3.1.23
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 +19 -3
- package/dist/index.js +36 -5
- package/dist/skill-bundle/.codex/skills/ai-train-local-research/SKILL.md +596 -0
- package/dist/skill-bundle/.codex/skills/ai-train-local-research/references/gate-ablation.md +324 -0
- package/dist/skill-bundle/.codex/skills/ai-train-local-research/references/reporting.md +227 -0
- package/dist/skill-bundle/.codex/skills/ai-train-local-research/scripts/ai-gate-ablation.mjs +5082 -0
- package/dist/skill-bundle/.codex/skills/ai-train-local-research/scripts/ai-gate-ablation.test.mjs +1170 -0
- package/dist/skill-bundle/.codex/skills/backtest-config-redis/SKILL.md +17 -0
- package/dist/skill-bundle/.codex/skills/backtest-config-redis/scripts/get_backtest_config.sh +21 -0
- package/dist/skill-bundle/.codex/skills/runtime-parity-mismatch-analysis/SKILL.md +146 -0
- package/dist/skill-bundle/.codex/skills/save-strategy-config-from-backtest/SKILL.md +58 -0
- package/dist/skill-bundle/.codex/skills/save-strategy-config-from-backtest/agents/openai.yaml +4 -0
- package/dist/skill-bundle/.codex/skills/strategy-backtest-research/SKILL.md +334 -0
- package/dist/skill-bundle/.codex/skills/strategy-backtest-research/references/research-notes.md +247 -0
- package/dist/skill-bundle/.codex/skills/strategy-backtest-research/scripts/backtest-run-metrics.mjs +647 -0
- package/dist/skill-bundle/.codex/skills/strategy-backtest-research/scripts/backtest-run-metrics.test.mjs +321 -0
- package/dist/skill-bundle/.codex/skills/strategy-backtest-research/scripts/fast-ai-export-metrics.mjs +744 -0
- package/dist/skill-bundle/.codex/skills/strategy-backtest-research/scripts/fast-ai-export-metrics.test.mjs +553 -0
- package/dist/skill-bundle/.codex/skills/strategy-backtest-research/scripts/research-notes-check.mjs +125 -0
- package/dist/skill-bundle/.codex/skills/strategy-improvement-research/SKILL.md +18 -1
- package/dist/skill-bundle/.codex/skills/strategy-release/SKILL.md +22 -0
- package/dist/skill-bundle/.codex/skills/strategy-release/agents/openai.yaml +4 -0
- package/dist/skill-bundle/.codex/skills/strategy-release/references/diagnose-live.md +126 -0
- package/dist/skill-bundle/.codex/skills/strategy-release/references/direction-policy.md +141 -0
- package/dist/skill-bundle/.codex/skills/strategy-release/references/directional-parameter-split.md +93 -0
- package/dist/skill-bundle/.codex/skills/strategy-release/references/evidence-limitations.md +76 -0
- package/dist/skill-bundle/.codex/skills/strategy-release/references/evidence-retention.md +157 -0
- package/dist/skill-bundle/.codex/skills/strategy-release/references/historical-hypothesis-audit.md +163 -0
- package/dist/skill-bundle/.codex/skills/strategy-release/references/professional-research-loop.md +198 -0
- package/dist/skill-bundle/.codex/skills/strategy-release/references/release-workflow.md +755 -0
- package/dist/skill-bundle/.codex/skills/strategy-release/references/research-objective.md +255 -0
- package/dist/skill-bundle/.codex/skills/strategy-release/references/verdict-contract.md +200 -0
- package/dist/skill-bundle/.codex/skills/strategy-release/scripts/direction-policy-checkpoint.mjs +137 -0
- package/dist/skill-bundle/.codex/skills/strategy-release/scripts/direction-policy-checkpoint.test.mjs +85 -0
- package/dist/skill-bundle/.codex/skills/strategy-release/scripts/directional-parameter-checkpoint.mjs +149 -0
- package/dist/skill-bundle/.codex/skills/strategy-release/scripts/directional-parameter-checkpoint.test.mjs +120 -0
- package/dist/skill-bundle/.codex/skills/strategy-release/scripts/release-progress-checkpoint.mjs +621 -0
- package/dist/skill-bundle/.codex/skills/strategy-release/scripts/release-progress-checkpoint.test.mjs +349 -0
- package/dist/skill-bundle/.codex/tradejs-skill-bundle.json +44 -3
- package/package.json +1 -1
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
3
|
+
import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
4
|
+
import os from 'node:os';
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
import { after, test } from 'node:test';
|
|
7
|
+
|
|
8
|
+
import { evaluateReleaseProgress } from './release-progress-checkpoint.mjs';
|
|
9
|
+
|
|
10
|
+
const root = mkdtempSync(path.join(os.tmpdir(), 'release-progress-v2-'));
|
|
11
|
+
after(() => rmSync(root, { recursive: true, force: true }));
|
|
12
|
+
|
|
13
|
+
const fileReference = (name, content) => {
|
|
14
|
+
const filePath = path.join(root, name);
|
|
15
|
+
const buffer = Buffer.isBuffer(content) ? content : Buffer.from(content);
|
|
16
|
+
writeFileSync(filePath, buffer);
|
|
17
|
+
return {
|
|
18
|
+
path: filePath,
|
|
19
|
+
sha256: createHash('sha256').update(buffer).digest('hex'),
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const jsonReference = (name, value) =>
|
|
24
|
+
fileReference(name, `${JSON.stringify(value, null, 2)}\n`);
|
|
25
|
+
|
|
26
|
+
const strategy = 'LiquidityTails';
|
|
27
|
+
const lineageId = 'liquidity-tails-release-20260821';
|
|
28
|
+
const objectiveArtifact = jsonReference('objective.json', {
|
|
29
|
+
schema: 'tradejs-release-objective/v2',
|
|
30
|
+
strategy,
|
|
31
|
+
lineageId,
|
|
32
|
+
});
|
|
33
|
+
const trialLedger = jsonReference('trial-ledger.json', {
|
|
34
|
+
schema: 'tradejs-release-trial-ledger/v2',
|
|
35
|
+
candidates: [],
|
|
36
|
+
});
|
|
37
|
+
const historyArtifact = jsonReference('history.json', {
|
|
38
|
+
schema: 'tradejs-strategy-hypothesis-inventory/v1',
|
|
39
|
+
strategy,
|
|
40
|
+
entries: [],
|
|
41
|
+
});
|
|
42
|
+
const revalidationArtifact = jsonReference('revalidation.json', {
|
|
43
|
+
schema: 'tradejs-release-candidate-revalidation/v2',
|
|
44
|
+
strategy,
|
|
45
|
+
lineageId,
|
|
46
|
+
objectiveFingerprint: objectiveArtifact.sha256,
|
|
47
|
+
historyInventorySha256: historyArtifact.sha256,
|
|
48
|
+
status: 'complete',
|
|
49
|
+
priorCandidateCount: 0,
|
|
50
|
+
candidates: [],
|
|
51
|
+
unresolved: [],
|
|
52
|
+
trialLedger,
|
|
53
|
+
});
|
|
54
|
+
const baselineArtifact = jsonReference('baseline.json', {
|
|
55
|
+
schema: 'tradejs-core-research-result/v1',
|
|
56
|
+
researchId: 'baseline',
|
|
57
|
+
});
|
|
58
|
+
const opportunityArtifact = jsonReference('opportunity.json', {
|
|
59
|
+
schema: 'tradejs-release-opportunity-map/v2',
|
|
60
|
+
});
|
|
61
|
+
const portfolioArtifact = jsonReference('portfolio.json', {
|
|
62
|
+
schema: 'tradejs-release-hypothesis-portfolio/v2',
|
|
63
|
+
});
|
|
64
|
+
const reportArtifact = jsonReference('report.json', { report: 'complete' });
|
|
65
|
+
const chartArtifact = jsonReference('chart.json', { chart: 'complete' });
|
|
66
|
+
|
|
67
|
+
const roundEvidence = (family, round) => {
|
|
68
|
+
const researchId = `${family}-round-${round}`;
|
|
69
|
+
const traceArtifact = fileReference(
|
|
70
|
+
`${researchId}-trace.jsonl`,
|
|
71
|
+
`${JSON.stringify({ researchId, event: 'entry' })}\n`,
|
|
72
|
+
);
|
|
73
|
+
const manifestArtifact = jsonReference(`${researchId}-manifest.json`, {
|
|
74
|
+
schema: 'tradejs-core-research-manifest/v1',
|
|
75
|
+
researchId,
|
|
76
|
+
status: 'completed',
|
|
77
|
+
});
|
|
78
|
+
const resultArtifact = jsonReference(`${researchId}-result.json`, {
|
|
79
|
+
schema: 'tradejs-core-research-result/v1',
|
|
80
|
+
researchId,
|
|
81
|
+
artifactHashes: { trace: traceArtifact.sha256 },
|
|
82
|
+
});
|
|
83
|
+
const handoffArtifact = jsonReference(`${researchId}-handoff.json`, {
|
|
84
|
+
schema: 'tradejs-release-causal-handoff/v1',
|
|
85
|
+
researchId,
|
|
86
|
+
round,
|
|
87
|
+
traceCoverage: 'complete',
|
|
88
|
+
resultSha256: resultArtifact.sha256,
|
|
89
|
+
});
|
|
90
|
+
return {
|
|
91
|
+
round,
|
|
92
|
+
researchId,
|
|
93
|
+
manifestArtifact,
|
|
94
|
+
resultArtifact,
|
|
95
|
+
traceArtifacts: [traceArtifact],
|
|
96
|
+
handoffArtifact,
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
const completedFamily = (id) => ({
|
|
101
|
+
id,
|
|
102
|
+
status: 'active',
|
|
103
|
+
roundArtifacts: [1, 2, 3].map((round) => roundEvidence(id, round)),
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
const completedFamilies = [
|
|
107
|
+
completedFamily('lifecycle'),
|
|
108
|
+
completedFamily('geometry'),
|
|
109
|
+
completedFamily('participation'),
|
|
110
|
+
];
|
|
111
|
+
const rescueArtifact = jsonReference('rescue.json', {
|
|
112
|
+
schema: 'tradejs-release-rescue-board/v2',
|
|
113
|
+
strategy,
|
|
114
|
+
lineageId,
|
|
115
|
+
objectiveFingerprint: objectiveArtifact.sha256,
|
|
116
|
+
children: [],
|
|
117
|
+
missingSlots: [
|
|
118
|
+
'no distinct cadence seed',
|
|
119
|
+
'no second distinct cadence seed',
|
|
120
|
+
'no third distinct cadence seed',
|
|
121
|
+
],
|
|
122
|
+
});
|
|
123
|
+
const compositionFingerprint = 'c'.repeat(64);
|
|
124
|
+
const selectedCompositionArtifact = jsonReference('selected.json', {
|
|
125
|
+
schema: 'tradejs-release-selected-composition/v2',
|
|
126
|
+
strategy,
|
|
127
|
+
lineageId,
|
|
128
|
+
candidateId: 'candidate-1',
|
|
129
|
+
compositionFingerprint,
|
|
130
|
+
objectiveFingerprint: objectiveArtifact.sha256,
|
|
131
|
+
historicalMatrixSha256: 'd'.repeat(64),
|
|
132
|
+
chartSha256: chartArtifact.sha256,
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
const input = (overrides = {}) => ({
|
|
136
|
+
schema: 'tradejs-release-progress-input/v2',
|
|
137
|
+
strategy,
|
|
138
|
+
lineageId,
|
|
139
|
+
objectiveContract: { artifact: objectiveArtifact },
|
|
140
|
+
historyAudit: { complete: true, artifact: historyArtifact },
|
|
141
|
+
candidateRevalidation: {
|
|
142
|
+
required: true,
|
|
143
|
+
complete: true,
|
|
144
|
+
artifact: revalidationArtifact,
|
|
145
|
+
},
|
|
146
|
+
baseline: {
|
|
147
|
+
complete: true,
|
|
148
|
+
reconciled: true,
|
|
149
|
+
artifact: baselineArtifact,
|
|
150
|
+
},
|
|
151
|
+
opportunityMap: { complete: true, artifact: opportunityArtifact },
|
|
152
|
+
hypothesisPortfolio: { frozen: true, artifact: portfolioArtifact },
|
|
153
|
+
families: [
|
|
154
|
+
{ id: 'lifecycle', status: 'active', roundArtifacts: [] },
|
|
155
|
+
{ id: 'geometry', status: 'active', roundArtifacts: [] },
|
|
156
|
+
{ id: 'participation', status: 'active', roundArtifacts: [] },
|
|
157
|
+
],
|
|
158
|
+
rescueBoard: { complete: false },
|
|
159
|
+
directionalParameterCheckpoint: { required: false, complete: false },
|
|
160
|
+
directionPolicyCheckpoint: { required: false, complete: false },
|
|
161
|
+
fullAiReport: { complete: false },
|
|
162
|
+
chart: { complete: false },
|
|
163
|
+
selectedComposition: null,
|
|
164
|
+
limitations: [],
|
|
165
|
+
...overrides,
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
test('requires round 1 despite provenance limitations', () => {
|
|
169
|
+
const result = evaluateReleaseProgress(
|
|
170
|
+
input({
|
|
171
|
+
limitations: [
|
|
172
|
+
'retrospective_current_universe',
|
|
173
|
+
'missing_effective_dated_membership',
|
|
174
|
+
'exposed_holdout',
|
|
175
|
+
],
|
|
176
|
+
}),
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
assert.equal(result.nextAction, 'RUN_CORE_ROUND_1');
|
|
180
|
+
assert.equal(result.evidenceCeiling, 'micro_forward_only');
|
|
181
|
+
assert.equal(result.verdictAllowed, false);
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
test('requires historical candidate revalidation before the baseline', () => {
|
|
185
|
+
const result = evaluateReleaseProgress(
|
|
186
|
+
input({
|
|
187
|
+
candidateRevalidation: { required: true, complete: false },
|
|
188
|
+
}),
|
|
189
|
+
);
|
|
190
|
+
|
|
191
|
+
assert.equal(result.nextAction, 'REVALIDATE_HISTORICAL_CANDIDATES');
|
|
192
|
+
assert.equal(result.phase, 'history');
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
test('rejects a zero-candidate revalidation when history contains prior behavior', () => {
|
|
196
|
+
const populatedHistory = jsonReference('populated-history.json', {
|
|
197
|
+
schema: 'tradejs-strategy-hypothesis-inventory/v1',
|
|
198
|
+
strategy,
|
|
199
|
+
entries: [
|
|
200
|
+
{
|
|
201
|
+
status: 'verified-result',
|
|
202
|
+
behaviorSha256: 'a'.repeat(64),
|
|
203
|
+
},
|
|
204
|
+
{ status: 'refactor-no-hypothesis' },
|
|
205
|
+
],
|
|
206
|
+
});
|
|
207
|
+
const incompleteRevalidation = jsonReference('incomplete-revalidation.json', {
|
|
208
|
+
schema: 'tradejs-release-candidate-revalidation/v2',
|
|
209
|
+
strategy,
|
|
210
|
+
lineageId,
|
|
211
|
+
objectiveFingerprint: objectiveArtifact.sha256,
|
|
212
|
+
historyInventorySha256: populatedHistory.sha256,
|
|
213
|
+
status: 'complete',
|
|
214
|
+
priorCandidateCount: 0,
|
|
215
|
+
candidates: [],
|
|
216
|
+
unresolved: [],
|
|
217
|
+
trialLedger,
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
assert.throws(
|
|
221
|
+
() =>
|
|
222
|
+
evaluateReleaseProgress(
|
|
223
|
+
input({
|
|
224
|
+
historyAudit: { complete: true, artifact: populatedHistory },
|
|
225
|
+
candidateRevalidation: {
|
|
226
|
+
required: true,
|
|
227
|
+
complete: true,
|
|
228
|
+
artifact: incompleteRevalidation,
|
|
229
|
+
},
|
|
230
|
+
}),
|
|
231
|
+
),
|
|
232
|
+
/every deduplicated prior candidate/,
|
|
233
|
+
);
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
test('does not trust a declared roundsCompleted count without artifacts', () => {
|
|
237
|
+
const result = evaluateReleaseProgress(
|
|
238
|
+
input({
|
|
239
|
+
families: [
|
|
240
|
+
{
|
|
241
|
+
id: 'lifecycle',
|
|
242
|
+
status: 'active',
|
|
243
|
+
roundsCompleted: 3,
|
|
244
|
+
roundArtifacts: [],
|
|
245
|
+
},
|
|
246
|
+
{ id: 'geometry', status: 'active', roundArtifacts: [] },
|
|
247
|
+
{ id: 'participation', status: 'active', roundArtifacts: [] },
|
|
248
|
+
],
|
|
249
|
+
}),
|
|
250
|
+
);
|
|
251
|
+
|
|
252
|
+
assert.equal(result.nextAction, 'RUN_CORE_ROUND_1');
|
|
253
|
+
assert.match(result.reason, /lifecycle/);
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
test('rejects a round whose result hash is not bound by the handoff', () => {
|
|
257
|
+
const invalidRound = roundEvidence('invalid', 1);
|
|
258
|
+
invalidRound.handoffArtifact = jsonReference(
|
|
259
|
+
'invalid-handoff-rewritten.json',
|
|
260
|
+
{
|
|
261
|
+
schema: 'tradejs-release-causal-handoff/v1',
|
|
262
|
+
researchId: invalidRound.researchId,
|
|
263
|
+
round: 1,
|
|
264
|
+
traceCoverage: 'complete',
|
|
265
|
+
resultSha256: '0'.repeat(64),
|
|
266
|
+
},
|
|
267
|
+
);
|
|
268
|
+
|
|
269
|
+
assert.throws(
|
|
270
|
+
() =>
|
|
271
|
+
evaluateReleaseProgress(
|
|
272
|
+
input({
|
|
273
|
+
families: [
|
|
274
|
+
{ id: 'invalid', status: 'active', roundArtifacts: [invalidRound] },
|
|
275
|
+
{ id: 'geometry', status: 'active', roundArtifacts: [] },
|
|
276
|
+
{ id: 'participation', status: 'active', roundArtifacts: [] },
|
|
277
|
+
],
|
|
278
|
+
}),
|
|
279
|
+
),
|
|
280
|
+
/bound to result SHA-256/,
|
|
281
|
+
);
|
|
282
|
+
});
|
|
283
|
+
|
|
284
|
+
test('allows a complete artifact-backed limited-provenance contour to decide', () => {
|
|
285
|
+
const result = evaluateReleaseProgress(
|
|
286
|
+
input({
|
|
287
|
+
families: completedFamilies,
|
|
288
|
+
rescueBoard: { complete: true, artifact: rescueArtifact },
|
|
289
|
+
fullAiReport: { complete: true, artifact: reportArtifact },
|
|
290
|
+
chart: { complete: true, artifact: chartArtifact },
|
|
291
|
+
selectedComposition: {
|
|
292
|
+
candidateId: 'candidate-1',
|
|
293
|
+
compositionFingerprint,
|
|
294
|
+
artifact: selectedCompositionArtifact,
|
|
295
|
+
},
|
|
296
|
+
limitations: ['retrospective_current_universe', 'exposed_holdout'],
|
|
297
|
+
}),
|
|
298
|
+
);
|
|
299
|
+
|
|
300
|
+
assert.equal(result.status, 'complete');
|
|
301
|
+
assert.equal(result.verdictAllowed, true);
|
|
302
|
+
assert.equal(result.nextAction, 'DECIDE_PROSPECTIVE_MICRO_FORWARD');
|
|
303
|
+
assert.equal(result.schema, 'tradejs-release-progress/v2');
|
|
304
|
+
assert.equal(result.selectedComposition.candidateId, 'candidate-1');
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
test('requires a selected composition after report and chart', () => {
|
|
308
|
+
const result = evaluateReleaseProgress(
|
|
309
|
+
input({
|
|
310
|
+
families: completedFamilies,
|
|
311
|
+
rescueBoard: { complete: true, artifact: rescueArtifact },
|
|
312
|
+
fullAiReport: { complete: true, artifact: reportArtifact },
|
|
313
|
+
chart: { complete: true, artifact: chartArtifact },
|
|
314
|
+
}),
|
|
315
|
+
);
|
|
316
|
+
|
|
317
|
+
assert.equal(result.nextAction, 'FREEZE_SELECTED_COMPOSITION');
|
|
318
|
+
assert.equal(result.verdictAllowed, false);
|
|
319
|
+
});
|
|
320
|
+
|
|
321
|
+
test('stops the invalid evidence path on causal leakage', () => {
|
|
322
|
+
const result = evaluateReleaseProgress(
|
|
323
|
+
input({ limitations: ['causal_leakage'] }),
|
|
324
|
+
);
|
|
325
|
+
|
|
326
|
+
assert.equal(result.nextAction, 'REPAIR_INVALID_EVIDENCE');
|
|
327
|
+
assert.equal(result.evidenceCeiling, 'invalid_evidence');
|
|
328
|
+
});
|
|
329
|
+
|
|
330
|
+
test('requires a hashed reason when a family retires before round 3', () => {
|
|
331
|
+
assert.throws(
|
|
332
|
+
() =>
|
|
333
|
+
evaluateReleaseProgress(
|
|
334
|
+
input({
|
|
335
|
+
families: [
|
|
336
|
+
{
|
|
337
|
+
id: 'lifecycle',
|
|
338
|
+
status: 'retired',
|
|
339
|
+
hardStopReason: 'mechanism_falsified',
|
|
340
|
+
roundArtifacts: [],
|
|
341
|
+
},
|
|
342
|
+
{ id: 'geometry', status: 'active', roundArtifacts: [] },
|
|
343
|
+
{ id: 'participation', status: 'active', roundArtifacts: [] },
|
|
344
|
+
],
|
|
345
|
+
}),
|
|
346
|
+
),
|
|
347
|
+
/retirementArtifact is required/,
|
|
348
|
+
);
|
|
349
|
+
});
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "tradejs-skill-bundle/v1",
|
|
3
3
|
"source": "TradeJS-Dev/TradeJS:.codex/skills",
|
|
4
|
-
"bundleSha256": "
|
|
4
|
+
"bundleSha256": "f058077d43fc342e82062908fa7512b74981c2bee878901508dd8d3fdba32e23",
|
|
5
5
|
"skills": [
|
|
6
|
+
"ai-train-local-research",
|
|
7
|
+
"backtest-config-redis",
|
|
8
|
+
"runtime-parity-mismatch-analysis",
|
|
9
|
+
"save-strategy-config-from-backtest",
|
|
10
|
+
"strategy-backtest-research",
|
|
6
11
|
"strategy-candidate-report",
|
|
7
12
|
"strategy-candidate-compare",
|
|
8
13
|
"strategy-improvement-plan",
|
|
@@ -10,16 +15,52 @@
|
|
|
10
15
|
"strategy-period-revalidate",
|
|
11
16
|
"strategy-forward-start",
|
|
12
17
|
"strategy-forward-status",
|
|
13
|
-
"strategy-risk-scale"
|
|
18
|
+
"strategy-risk-scale",
|
|
19
|
+
"strategy-release"
|
|
14
20
|
],
|
|
15
21
|
"files": {
|
|
22
|
+
".codex/skills/ai-train-local-research/references/gate-ablation.md": "5bd50a225864b518c1ca3400716c384f289899f8b81dd33df6aee3dc2998ff0b",
|
|
23
|
+
".codex/skills/ai-train-local-research/references/reporting.md": "a5a5cc6438a8cc228560e302e944f1ff320f4c963988af83e1ba1443728f7149",
|
|
24
|
+
".codex/skills/ai-train-local-research/scripts/ai-gate-ablation.mjs": "b3a4bceff25219644e96d5309d3c11c59761b9cd7d7096ee701f95654853cfa8",
|
|
25
|
+
".codex/skills/ai-train-local-research/scripts/ai-gate-ablation.test.mjs": "dc5128b8743f67cc496a296d52a21ec3cc139308ffc80eac07cf3a77dc4c78bf",
|
|
26
|
+
".codex/skills/ai-train-local-research/SKILL.md": "479e44aad9cb6ab6b5c8931c807c63cf2a1938a59d01f553c20f44645716a23a",
|
|
27
|
+
".codex/skills/backtest-config-redis/scripts/get_backtest_config.sh": "833e950d6348c5b7a4bd3f00d25af60f6394190bff744bd5ab64db9e43d826d5",
|
|
28
|
+
".codex/skills/backtest-config-redis/SKILL.md": "85e7b1fa425aa23dfa7950de05c1d3ce046d044dc3872f3665705e9e2f2a1977",
|
|
29
|
+
".codex/skills/runtime-parity-mismatch-analysis/SKILL.md": "289925c0069d1933ec3b09d5d6a020632170716c61aafb7031a0998acf3736f6",
|
|
30
|
+
".codex/skills/save-strategy-config-from-backtest/agents/openai.yaml": "ba163f9449562241ed954ca2e0f12e22562390740cdcf0d09d7f99f0ef791741",
|
|
31
|
+
".codex/skills/save-strategy-config-from-backtest/SKILL.md": "a73cddc29fb8fa741fe6226c051e19b0f9a19747babf96d336e7f165fb1fd298",
|
|
32
|
+
".codex/skills/strategy-backtest-research/references/research-notes.md": "e65eb2124115a11a5be637964efed06961c7a90eff33d95eaf238b521d1f505a",
|
|
33
|
+
".codex/skills/strategy-backtest-research/scripts/backtest-run-metrics.mjs": "dbcc6bb7cab4e0108ed11df503b8a0a337d1a01b77c5b56554ce1264a00f5d57",
|
|
34
|
+
".codex/skills/strategy-backtest-research/scripts/backtest-run-metrics.test.mjs": "a00d0ae5fb0037cc554282dbe22109a9e34cb64b93d26a6feab69005a2ba637f",
|
|
35
|
+
".codex/skills/strategy-backtest-research/scripts/fast-ai-export-metrics.mjs": "1d1747d34269ad15a610dcd687334c3d47ed9460d891285ad1dd851c7658d1af",
|
|
36
|
+
".codex/skills/strategy-backtest-research/scripts/fast-ai-export-metrics.test.mjs": "4caab52646504afd2a6f1e4ba9f43d6b07d714baca89d2a2010545fb4210a9da",
|
|
37
|
+
".codex/skills/strategy-backtest-research/scripts/research-notes-check.mjs": "435aa6560abcf4e8a60fb86230d8d8de2f2dc9e4c52acc7a272ce30287d40325",
|
|
38
|
+
".codex/skills/strategy-backtest-research/SKILL.md": "4acc57b255cfe8b16a2b2bf0af0c8ee50e79e2bcea3f8045d422342007b8a779",
|
|
16
39
|
".codex/skills/strategy-candidate-compare/SKILL.md": "34dbca2c77ce74836f5c264131cefb751313147128ab1c3f947002f975be051c",
|
|
17
40
|
".codex/skills/strategy-candidate-report/SKILL.md": "3cad1241ce2107d7e30a5d78eafd6429514a10d1a8e9cf3d0e97ffef9d691ab6",
|
|
18
41
|
".codex/skills/strategy-forward-start/SKILL.md": "1591bd1c64864283320793b3c0bb4e1677aab960951ef8b487a1101ca7b6f82c",
|
|
19
42
|
".codex/skills/strategy-forward-status/SKILL.md": "b41f117680259fd7b4d5cbe3c0a1be75a42f08c8cf78f9ad7ccb0d90bfc66269",
|
|
20
43
|
".codex/skills/strategy-improvement-plan/SKILL.md": "f5f0f390941dd3332890a2f0ffae1248abde4925db2cf49a41c0c0c1b47e7864",
|
|
21
|
-
".codex/skills/strategy-improvement-research/SKILL.md": "
|
|
44
|
+
".codex/skills/strategy-improvement-research/SKILL.md": "634b6d4d7e9e8e22db9c073bef0410ae90ab1b68d0fc2610d8def48b5fc687c4",
|
|
22
45
|
".codex/skills/strategy-period-revalidate/SKILL.md": "f367ba1c632506a7d9bf92662a40b61df55f7a56ad04f3600a475b3c365bbbcb",
|
|
46
|
+
".codex/skills/strategy-release/agents/openai.yaml": "46ddb09119b08ae3be3b9509121b57492342012e774789b615767b24270dba17",
|
|
47
|
+
".codex/skills/strategy-release/references/diagnose-live.md": "dc2effa6eba34e3cfcc1eaf4d2fd1c96d6ccdda971a0edec76c9eed1ec293a3d",
|
|
48
|
+
".codex/skills/strategy-release/references/direction-policy.md": "e7635e709dfc7301b94f3dbc1421c6a779c7c39ce4f6066b2eece38e4e600bec",
|
|
49
|
+
".codex/skills/strategy-release/references/directional-parameter-split.md": "c303fbd15183b4b8c5662526d5bc762edc0a21a42c45e141d0dc5efdd3b52d8c",
|
|
50
|
+
".codex/skills/strategy-release/references/evidence-limitations.md": "523d6541a230b51c2b0b81a6c11c99e3aef69203f22b77e94fda1e3b15321e20",
|
|
51
|
+
".codex/skills/strategy-release/references/evidence-retention.md": "8fc5ccbc1003e8dc524f12dd56592eb72839c251245c6f68fd495fd4871e4993",
|
|
52
|
+
".codex/skills/strategy-release/references/historical-hypothesis-audit.md": "3c4d579a0c097e974592b855891446060eb70d8bddf8558d765052a92509b516",
|
|
53
|
+
".codex/skills/strategy-release/references/professional-research-loop.md": "e440f05dd6b5c803ba20da9f019f745f89477724d46551c53dbb8dab9cffe40f",
|
|
54
|
+
".codex/skills/strategy-release/references/release-workflow.md": "aeda374c8b0a5d14629b2a1476a9c6e67e556e7ff7709b566d532334f39863eb",
|
|
55
|
+
".codex/skills/strategy-release/references/research-objective.md": "650a29260ff7a2ee5dcac89500f59b4c81c2fbd650d6d247a1c799e45814798a",
|
|
56
|
+
".codex/skills/strategy-release/references/verdict-contract.md": "7cd2d0ae8c8264da36319a78ff80d76893d5233cbceba4d076973f32b2bb2fe9",
|
|
57
|
+
".codex/skills/strategy-release/scripts/direction-policy-checkpoint.mjs": "739240707323ec80b16191b447e76dd2295e946564c3a67f8472949d6129b3a1",
|
|
58
|
+
".codex/skills/strategy-release/scripts/direction-policy-checkpoint.test.mjs": "838465922425be81c011e82b2df4255d136e074f84128124925c0553958a8389",
|
|
59
|
+
".codex/skills/strategy-release/scripts/directional-parameter-checkpoint.mjs": "ff276ef75f65f247ed750685ee59225d5bf70e7d5f5fbb1f734efa3becb5e616",
|
|
60
|
+
".codex/skills/strategy-release/scripts/directional-parameter-checkpoint.test.mjs": "a4f4433e4b59040a41f392b91e2a36cb2ec821737f77afbebf0cf2c5268dd11f",
|
|
61
|
+
".codex/skills/strategy-release/scripts/release-progress-checkpoint.mjs": "28da8715ab51ee7217d633c675d014b8004e5ddda8faf9489ebacacef98f6b9b",
|
|
62
|
+
".codex/skills/strategy-release/scripts/release-progress-checkpoint.test.mjs": "d378b0ab87cd3ee7bbf384ec5f5810565b480b56533ad3c6700edf5938286a38",
|
|
63
|
+
".codex/skills/strategy-release/SKILL.md": "590948c2c1ad222c7784b050e0fa0a8fea60efa7b0f23d8d355fd56a3e8a1291",
|
|
23
64
|
".codex/skills/strategy-risk-scale/SKILL.md": "2c07846c9da2fd622ea6f5586c42863fc27b35a7d1d00614d5bbe0719da4d39f"
|
|
24
65
|
}
|
|
25
66
|
}
|