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,149 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { readFile } from 'node:fs/promises';
4
+ import { pathToFileURL } from 'node:url';
5
+
6
+ const EFFECTS = new Set(['improved', 'worsened', 'neutral', 'inconclusive']);
7
+ const RESOLUTIONS = new Set([
8
+ 'decision_time',
9
+ 'detector_state',
10
+ 'shared_lifecycle',
11
+ ]);
12
+
13
+ function assertBoolean(value, label) {
14
+ if (typeof value !== 'boolean') {
15
+ throw new Error(`${label} must be boolean`);
16
+ }
17
+ }
18
+
19
+ function readSide(evidence, side) {
20
+ const value = evidence?.[side];
21
+ if (!EFFECTS.has(value?.effect)) {
22
+ throw new Error(`${side}.effect must be a supported effect`);
23
+ }
24
+ assertBoolean(value.supportAdequate, `${side}.supportAdequate`);
25
+ return value;
26
+ }
27
+
28
+ export function evaluateDirectionalParameterCheckpoint(input) {
29
+ const parameter = input?.parameter;
30
+ const evidence = input?.evidence;
31
+ if (!parameter?.name) throw new Error('parameter.name is required');
32
+ if (!RESOLUTIONS.has(parameter.resolution)) {
33
+ throw new Error('parameter.resolution is invalid');
34
+ }
35
+ assertBoolean(parameter.isolatedChange, 'parameter.isolatedChange');
36
+ assertBoolean(
37
+ parameter.legacyFallbackSupported,
38
+ 'parameter.legacyFallbackSupported',
39
+ );
40
+ assertBoolean(evidence?.complete, 'evidence.complete');
41
+ assertBoolean(evidence?.reconciled, 'evidence.reconciled');
42
+ assertBoolean(
43
+ evidence?.intendedTransitionChanged,
44
+ 'evidence.intendedTransitionChanged',
45
+ );
46
+ const long = readSide(evidence, 'LONG');
47
+ const short = readSide(evidence, 'SHORT');
48
+
49
+ const result = (overrides) => ({
50
+ schema: 'tradejs-directional-parameter-checkpoint/v1',
51
+ parameter: parameter.name,
52
+ required: false,
53
+ targetDirection: null,
54
+ implementationMode: null,
55
+ action: 'KEEP_GLOBAL_PARAMETER',
56
+ reason: 'No supported opposing directional effect was established.',
57
+ ...overrides,
58
+ });
59
+
60
+ if (!evidence.complete || !evidence.reconciled) {
61
+ return result({
62
+ action: 'REPAIR_DIRECTIONAL_EVIDENCE',
63
+ reason: 'Directional evidence must be complete and reconciled.',
64
+ });
65
+ }
66
+ if (!parameter.isolatedChange) {
67
+ return result({
68
+ action: 'RUN_SINGLE_PARAMETER_ABLATION',
69
+ reason: 'The observed side conflict is not attributable to one field.',
70
+ });
71
+ }
72
+ if (!evidence.intendedTransitionChanged) {
73
+ return result({
74
+ action: 'REJECT_DIRECTIONAL_NO_OP',
75
+ reason: 'The parameter did not change its intended causal transition.',
76
+ });
77
+ }
78
+ if (
79
+ !long.supportAdequate ||
80
+ !short.supportAdequate ||
81
+ long.effect === 'inconclusive' ||
82
+ short.effect === 'inconclusive'
83
+ ) {
84
+ return result({
85
+ action: 'COLLECT_DIRECTIONAL_EVIDENCE',
86
+ reason: 'Both sides need adequate support under the frozen side rule.',
87
+ });
88
+ }
89
+
90
+ const targetDirection =
91
+ long.effect === 'improved' && short.effect === 'worsened'
92
+ ? 'LONG'
93
+ : short.effect === 'improved' && long.effect === 'worsened'
94
+ ? 'SHORT'
95
+ : null;
96
+ if (!targetDirection) return result({});
97
+
98
+ if (!parameter.legacyFallbackSupported) {
99
+ return result({
100
+ required: true,
101
+ targetDirection,
102
+ action: 'DESIGN_LEGACY_FALLBACK',
103
+ reason: 'Directional overrides must preserve the original global field.',
104
+ });
105
+ }
106
+
107
+ const implementationMode =
108
+ parameter.resolution === 'decision_time'
109
+ ? 'fallback_override'
110
+ : parameter.resolution === 'detector_state'
111
+ ? 'separate_directional_state'
112
+ : 'fallback_override_with_occupancy_audit';
113
+ const action =
114
+ parameter.resolution === 'detector_state'
115
+ ? 'DESIGN_DIRECTIONAL_STATE_ISOLATION'
116
+ : 'FREEZE_DIRECTIONAL_PARAMETER_SPLIT';
117
+
118
+ return result({
119
+ required: true,
120
+ targetDirection,
121
+ implementationMode,
122
+ action,
123
+ reason: `${targetDirection} improves while the opposite side worsens under the matched one-field comparison.`,
124
+ });
125
+ }
126
+
127
+ async function main() {
128
+ const inputIndex = process.argv.indexOf('--input');
129
+ if (inputIndex === -1 || !process.argv[inputIndex + 1]) {
130
+ throw new Error(
131
+ 'Usage: directional-parameter-checkpoint.mjs --input <checkpoint.json>',
132
+ );
133
+ }
134
+ const input = JSON.parse(
135
+ await readFile(process.argv[inputIndex + 1], 'utf8'),
136
+ );
137
+ process.stdout.write(
138
+ `${JSON.stringify(evaluateDirectionalParameterCheckpoint(input), null, 2)}\n`,
139
+ );
140
+ }
141
+
142
+ if (import.meta.url === pathToFileURL(process.argv[1] ?? '').href) {
143
+ main().catch((error) => {
144
+ process.stderr.write(
145
+ `${error instanceof Error ? error.message : String(error)}\n`,
146
+ );
147
+ process.exitCode = 1;
148
+ });
149
+ }
@@ -0,0 +1,120 @@
1
+ import assert from 'node:assert/strict';
2
+ import test from 'node:test';
3
+
4
+ import { evaluateDirectionalParameterCheckpoint } from './directional-parameter-checkpoint.mjs';
5
+
6
+ const input = (overrides = {}) => ({
7
+ parameter: {
8
+ name: 'ENTRY_THRESHOLD',
9
+ isolatedChange: true,
10
+ legacyFallbackSupported: true,
11
+ resolution: 'decision_time',
12
+ },
13
+ evidence: {
14
+ complete: true,
15
+ reconciled: true,
16
+ intendedTransitionChanged: true,
17
+ LONG: { effect: 'improved', supportAdequate: true },
18
+ SHORT: { effect: 'worsened', supportAdequate: true },
19
+ },
20
+ ...overrides,
21
+ });
22
+
23
+ test('requires a LONG override for an opposing matched side effect', () => {
24
+ const result = evaluateDirectionalParameterCheckpoint(input());
25
+
26
+ assert.equal(result.required, true);
27
+ assert.equal(result.targetDirection, 'LONG');
28
+ assert.equal(result.implementationMode, 'fallback_override');
29
+ assert.equal(result.action, 'FREEZE_DIRECTIONAL_PARAMETER_SPLIT');
30
+ });
31
+
32
+ test('mirrors the target direction and requires detector state isolation', () => {
33
+ const result = evaluateDirectionalParameterCheckpoint(
34
+ input({
35
+ parameter: {
36
+ name: 'ZONE_LOOKBACK',
37
+ isolatedChange: true,
38
+ legacyFallbackSupported: true,
39
+ resolution: 'detector_state',
40
+ },
41
+ evidence: {
42
+ complete: true,
43
+ reconciled: true,
44
+ intendedTransitionChanged: true,
45
+ LONG: { effect: 'worsened', supportAdequate: true },
46
+ SHORT: { effect: 'improved', supportAdequate: true },
47
+ },
48
+ }),
49
+ );
50
+
51
+ assert.equal(result.targetDirection, 'SHORT');
52
+ assert.equal(result.implementationMode, 'separate_directional_state');
53
+ assert.equal(result.action, 'DESIGN_DIRECTIONAL_STATE_ISOLATION');
54
+ });
55
+
56
+ test('keeps a globally useful parameter global', () => {
57
+ const result = evaluateDirectionalParameterCheckpoint(
58
+ input({
59
+ evidence: {
60
+ complete: true,
61
+ reconciled: true,
62
+ intendedTransitionChanged: true,
63
+ LONG: { effect: 'improved', supportAdequate: true },
64
+ SHORT: { effect: 'improved', supportAdequate: true },
65
+ },
66
+ }),
67
+ );
68
+
69
+ assert.equal(result.required, false);
70
+ assert.equal(result.action, 'KEEP_GLOBAL_PARAMETER');
71
+ });
72
+
73
+ test('requires a single-parameter ablation before splitting a bundle', () => {
74
+ const result = evaluateDirectionalParameterCheckpoint(
75
+ input({
76
+ parameter: {
77
+ name: 'ENTRY_THRESHOLD',
78
+ isolatedChange: false,
79
+ legacyFallbackSupported: true,
80
+ resolution: 'decision_time',
81
+ },
82
+ }),
83
+ );
84
+
85
+ assert.equal(result.required, false);
86
+ assert.equal(result.action, 'RUN_SINGLE_PARAMETER_ABLATION');
87
+ });
88
+
89
+ test('does not split under insufficient side support', () => {
90
+ const result = evaluateDirectionalParameterCheckpoint(
91
+ input({
92
+ evidence: {
93
+ complete: true,
94
+ reconciled: true,
95
+ intendedTransitionChanged: true,
96
+ LONG: { effect: 'improved', supportAdequate: true },
97
+ SHORT: { effect: 'worsened', supportAdequate: false },
98
+ },
99
+ }),
100
+ );
101
+
102
+ assert.equal(result.required, false);
103
+ assert.equal(result.action, 'COLLECT_DIRECTIONAL_EVIDENCE');
104
+ });
105
+
106
+ test('requires a backward-compatible fallback contract', () => {
107
+ const result = evaluateDirectionalParameterCheckpoint(
108
+ input({
109
+ parameter: {
110
+ name: 'ENTRY_THRESHOLD',
111
+ isolatedChange: true,
112
+ legacyFallbackSupported: false,
113
+ resolution: 'shared_lifecycle',
114
+ },
115
+ }),
116
+ );
117
+
118
+ assert.equal(result.required, true);
119
+ assert.equal(result.action, 'DESIGN_LEGACY_FALLBACK');
120
+ });