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.
Files changed (40) hide show
  1. package/README.md +19 -3
  2. package/dist/index.js +36 -5
  3. package/dist/skill-bundle/.codex/skills/ai-train-local-research/SKILL.md +596 -0
  4. package/dist/skill-bundle/.codex/skills/ai-train-local-research/references/gate-ablation.md +324 -0
  5. package/dist/skill-bundle/.codex/skills/ai-train-local-research/references/reporting.md +227 -0
  6. package/dist/skill-bundle/.codex/skills/ai-train-local-research/scripts/ai-gate-ablation.mjs +5082 -0
  7. package/dist/skill-bundle/.codex/skills/ai-train-local-research/scripts/ai-gate-ablation.test.mjs +1170 -0
  8. package/dist/skill-bundle/.codex/skills/backtest-config-redis/SKILL.md +17 -0
  9. package/dist/skill-bundle/.codex/skills/backtest-config-redis/scripts/get_backtest_config.sh +21 -0
  10. package/dist/skill-bundle/.codex/skills/runtime-parity-mismatch-analysis/SKILL.md +146 -0
  11. package/dist/skill-bundle/.codex/skills/save-strategy-config-from-backtest/SKILL.md +58 -0
  12. package/dist/skill-bundle/.codex/skills/save-strategy-config-from-backtest/agents/openai.yaml +4 -0
  13. package/dist/skill-bundle/.codex/skills/strategy-backtest-research/SKILL.md +334 -0
  14. package/dist/skill-bundle/.codex/skills/strategy-backtest-research/references/research-notes.md +247 -0
  15. package/dist/skill-bundle/.codex/skills/strategy-backtest-research/scripts/backtest-run-metrics.mjs +647 -0
  16. package/dist/skill-bundle/.codex/skills/strategy-backtest-research/scripts/backtest-run-metrics.test.mjs +321 -0
  17. package/dist/skill-bundle/.codex/skills/strategy-backtest-research/scripts/fast-ai-export-metrics.mjs +744 -0
  18. package/dist/skill-bundle/.codex/skills/strategy-backtest-research/scripts/fast-ai-export-metrics.test.mjs +553 -0
  19. package/dist/skill-bundle/.codex/skills/strategy-backtest-research/scripts/research-notes-check.mjs +125 -0
  20. package/dist/skill-bundle/.codex/skills/strategy-improvement-research/SKILL.md +18 -1
  21. package/dist/skill-bundle/.codex/skills/strategy-release/SKILL.md +22 -0
  22. package/dist/skill-bundle/.codex/skills/strategy-release/agents/openai.yaml +4 -0
  23. package/dist/skill-bundle/.codex/skills/strategy-release/references/diagnose-live.md +126 -0
  24. package/dist/skill-bundle/.codex/skills/strategy-release/references/direction-policy.md +141 -0
  25. package/dist/skill-bundle/.codex/skills/strategy-release/references/directional-parameter-split.md +93 -0
  26. package/dist/skill-bundle/.codex/skills/strategy-release/references/evidence-limitations.md +76 -0
  27. package/dist/skill-bundle/.codex/skills/strategy-release/references/evidence-retention.md +157 -0
  28. package/dist/skill-bundle/.codex/skills/strategy-release/references/historical-hypothesis-audit.md +163 -0
  29. package/dist/skill-bundle/.codex/skills/strategy-release/references/professional-research-loop.md +198 -0
  30. package/dist/skill-bundle/.codex/skills/strategy-release/references/release-workflow.md +755 -0
  31. package/dist/skill-bundle/.codex/skills/strategy-release/references/research-objective.md +255 -0
  32. package/dist/skill-bundle/.codex/skills/strategy-release/references/verdict-contract.md +200 -0
  33. package/dist/skill-bundle/.codex/skills/strategy-release/scripts/direction-policy-checkpoint.mjs +137 -0
  34. package/dist/skill-bundle/.codex/skills/strategy-release/scripts/direction-policy-checkpoint.test.mjs +85 -0
  35. package/dist/skill-bundle/.codex/skills/strategy-release/scripts/directional-parameter-checkpoint.mjs +149 -0
  36. package/dist/skill-bundle/.codex/skills/strategy-release/scripts/directional-parameter-checkpoint.test.mjs +120 -0
  37. package/dist/skill-bundle/.codex/skills/strategy-release/scripts/release-progress-checkpoint.mjs +621 -0
  38. package/dist/skill-bundle/.codex/skills/strategy-release/scripts/release-progress-checkpoint.test.mjs +349 -0
  39. package/dist/skill-bundle/.codex/tradejs-skill-bundle.json +44 -3
  40. 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": "61f0c85bbb29614ba43d447e808c9321fac85aad391f707ff18f0d51fcaace65",
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": "38fe575954db303dc28763432b2bbc7bc07054adb56196810f15490755a75f76",
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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-tradejs",
3
- "version": "3.1.22",
3
+ "version": "3.1.23",
4
4
  "description": "Create a ready-to-run TradeJS project with local infrastructure and the Web UI.",
5
5
  "keywords": [
6
6
  "tradejs",