Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
a435ab9
feat(strategy): enforce evidence-first review gates
Pigbibi Jul 11, 2026
caaaa65
fix(strategy): address review gate findings
Pigbibi Jul 11, 2026
e4f1467
fix(strategy): validate complete review payload
Pigbibi Jul 11, 2026
3a332dc
fix(strategy): persist review provenance metadata
Pigbibi Jul 11, 2026
4ba63d4
fix(strategy): close schema and provenance gaps
Pigbibi Jul 11, 2026
6d247df
fix(strategy): keep legacy export and close gate bypass
Pigbibi Jul 11, 2026
9f41a33
feat(strategy): add human decision packet contract
Pigbibi Jul 11, 2026
975d82e
fix(strategy): constrain human actions for weak evidence
Pigbibi Jul 11, 2026
b762de5
fix(strategy): align review outcomes and provenance
Pigbibi Jul 11, 2026
cbe4538
feat(strategy): codify bounded canary boundary
Pigbibi Jul 11, 2026
fa3309f
fix(strategy): enforce evidence on passing reviews
Pigbibi Jul 11, 2026
9032d90
fix(strategy): close review schema and provenance gaps
Pigbibi Jul 11, 2026
97c9b79
fix(strategy): make review contract fail closed
Pigbibi Jul 11, 2026
4ec7d0f
fix(strategy): model dual provenance explicitly
Pigbibi Jul 11, 2026
9a3cf8f
fix(workflow): export preflight bundle root
Pigbibi Jul 11, 2026
8de84b4
fix(strategy): formalize canary and verified provenance
Pigbibi Jul 11, 2026
013efe9
fix(strategy): mirror strict canary provenance checks
Pigbibi Jul 11, 2026
00e8a6c
fix(strategy): close provenance state consistency
Pigbibi Jul 11, 2026
0b43426
fix(strategy): guard snapshot provenance timestamp
Pigbibi Jul 11, 2026
4aee232
fix(strategy): close review provenance validation
Pigbibi Jul 11, 2026
23d3dac
fix(strategy): make validator reject malformed JSON safely
Pigbibi Jul 11, 2026
cc8c22e
fix(strategy): fail closed on missing review artifacts
Pigbibi Jul 11, 2026
7d3d307
fix(strategy): bind human actions to recommendation
Pigbibi Jul 11, 2026
cf3f4dc
fix(strategy): enforce decision recommendation mapping
Pigbibi Jul 11, 2026
70e0f06
fix(strategy): require resolvable review evidence refs
Pigbibi Jul 11, 2026
efc3084
fix(strategy): align hard gate status contract
Pigbibi Jul 11, 2026
c9b88fe
fix(strategy): reject non-finite canary limits
Pigbibi Jul 11, 2026
24f0177
fix(strategy): separate provenance timestamps
Pigbibi Jul 11, 2026
4c06ba4
test(strategy): require complete backtest provenance
Pigbibi Jul 11, 2026
6aa2a8c
fix(strategy): reject non-finite scorecards
Pigbibi Jul 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/reusable-drift-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,9 @@ jobs:
mkdir -p "$LIFECYCLE_LOCAL_ROOT" "$GITHUB_WORKSPACE/$SNAPSHOT_CHECKOUT_PATH/data/output"
cp -a "$lifecycle_source/." "$LIFECYCLE_LOCAL_ROOT/"
cp -a "$snapshot_source/." "$snapshot_target/"
if [ "$STRATEGY_DOMAIN" = "crypto" ]; then
echo "CRYPTO_LIFECYCLE_PREFLIGHT_ROOT=$PREFLIGHT_BUNDLE_ROOT" >> "$GITHUB_ENV"
fi

- name: Build lifecycle performance snapshots
run: quant-lifecycle monitor --domain ${{ inputs.strategy_domain }}
Expand Down
132 changes: 132 additions & 0 deletions schemas/strategy-review.v1.schema.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://quantstrategylab.dev/schemas/strategy-review.v1.schema.json",
"title": "Strategy Review Result v1",
"type": "object",
"required": ["schema_version", "profile", "decision", "promotion_allowed", "score", "hard_gates", "scorecard", "blocking_reason_codes", "evidence", "decision_packet"],
"properties": {
"schema_version": { "const": "strategy_review.v1" },
"profile": { "type": "string", "minLength": 1 },
"decision": { "enum": ["pass", "fail", "insufficient_evidence"] },
"promotion_allowed": { "type": "boolean", "const": false },
"score": { "type": "number", "minimum": 0, "maximum": 100 },
"hard_gates": {
"type": "array",
"minItems": 12,
"maxItems": 12,
"items": {
"type": "object",
"required": ["id", "status", "reason_codes", "evidence_refs"],
"properties": {
"id": { "type": "string", "pattern": "^H([1-9]|1[0-2])$" },
"name": { "type": "string" },
"status": { "enum": ["pass", "fail", "insufficient_evidence"] },
"reason_codes": { "type": "array", "items": { "type": "string" } },
"evidence_refs": { "type": "array", "items": { "type": "string", "minLength": 1 } }
},
"additionalProperties": false
},
"allOf": [
{ "contains": { "type": "object", "properties": { "id": { "const": "H1" } }, "required": ["id"] } },
{ "contains": { "type": "object", "properties": { "id": { "const": "H2" } }, "required": ["id"] } },
{ "contains": { "type": "object", "properties": { "id": { "const": "H3" } }, "required": ["id"] } },
{ "contains": { "type": "object", "properties": { "id": { "const": "H4" } }, "required": ["id"] } },
{ "contains": { "type": "object", "properties": { "id": { "const": "H5" } }, "required": ["id"] } },
{ "contains": { "type": "object", "properties": { "id": { "const": "H6" } }, "required": ["id"] } },
{ "contains": { "type": "object", "properties": { "id": { "const": "H7" } }, "required": ["id"] } },
{ "contains": { "type": "object", "properties": { "id": { "const": "H8" } }, "required": ["id"] } },
{ "contains": { "type": "object", "properties": { "id": { "const": "H9" } }, "required": ["id"] } },
{ "contains": { "type": "object", "properties": { "id": { "const": "H10" } }, "required": ["id"] } },
{ "contains": { "type": "object", "properties": { "id": { "const": "H11" } }, "required": ["id"] } },
{ "contains": { "type": "object", "properties": { "id": { "const": "H12" } }, "required": ["id"] } }
]
},
"scorecard": { "type": "object", "required": ["total", "max", "scored_gates"], "properties": { "total": { "type": "number" }, "max": { "type": "number" }, "scored_gates": { "type": "integer" } }, "additionalProperties": false },
"blocking_reason_codes": { "type": "array", "items": { "type": "string" } },
"evidence": {
"type": "object",
"required": ["metrics_kind", "data_source", "sample_count", "oos_folds", "placeholder_metrics", "provenance"],
"properties": {
"metrics_kind": { "const": "performance" },
"data_source": { "type": "string", "minLength": 1 },
"sample_count": { "type": "integer", "minimum": 0 },
"oos_folds": { "type": "integer", "minimum": 0 },
"placeholder_metrics": { "const": false },
"provenance": {
"type": "object",
"required": ["snapshot", "backtest"],
"properties": {
"snapshot": { "$ref": "#/$defs/provenance" },
"backtest": { "$ref": "#/$defs/provenance" }
},
"additionalProperties": false
},
"generated_at": { "type": "string" },
"missing_artifacts": { "type": "array", "items": { "type": "string" } }
},
"additionalProperties": false
},
"decision_packet": {
"type": "object",
"required": ["strategy_what", "return_source", "loss_scenarios", "max_risk", "evidence_sufficiency", "version_change", "system_recommendation", "technical_evidence_refs", "automation_boundary", "allowed_human_decisions"],
"properties": {
"strategy_what": { "type": "string", "minLength": 1 },
"return_source": { "type": "string", "minLength": 1 },
"loss_scenarios": { "type": "string", "minLength": 1 },
"max_risk": { "type": "string", "minLength": 1 },
"evidence_sufficiency": { "enum": ["sufficient", "insufficient_evidence"] },
"version_change": { "type": "string", "minLength": 1 },
"system_recommendation": { "enum": ["approve_research", "approve_shadow", "approve_canary", "approve_live", "reject_rollback", "insufficient_evidence"] },
"technical_evidence_refs": { "type": "array", "items": { "type": "string", "minLength": 1 } },
"automation_boundary": {
"type": "object",
"required": ["research_auto_after_hard_gates", "shadow_auto_after_hard_gates", "canary_mode", "canary_limits", "auto_scale_allowed", "normal_live_requires_human", "funding_leverage_risk_override_requires_human", "hard_risk_auto_pause_rollback"],
"properties": {
"research_auto_after_hard_gates": { "const": true },
"shadow_auto_after_hard_gates": { "const": true },
"canary_mode": { "const": "bounded_preapproved_only" },
"canary_limits": {
"type": "object",
"required": ["max_capital", "capital_currency", "max_duration_days", "max_drawdown_fraction", "max_leverage", "max_concurrency"],
"properties": {
"max_capital": { "type": "number", "exclusiveMinimum": 0 },
"capital_currency": { "type": "string", "minLength": 3 },
"max_duration_days": { "type": "integer", "minimum": 1 },
"max_drawdown_fraction": { "type": "number", "exclusiveMinimum": 0, "exclusiveMaximum": 1 },
"max_leverage": { "type": "number", "exclusiveMinimum": 0 },
"max_concurrency": { "type": "integer", "minimum": 1 }
},
"additionalProperties": false
},
"auto_scale_allowed": { "const": false },
"normal_live_requires_human": { "const": true },
"funding_leverage_risk_override_requires_human": { "const": true },
"hard_risk_auto_pause_rollback": { "const": true }
},
"additionalProperties": false
},
"allowed_human_decisions": {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": { "enum": ["approve_research", "approve_shadow", "approve_canary", "approve_live", "reject_rollback"] }
}
},
"additionalProperties": false
}
},
"$defs": {
"provenance": {
"type": "object",
"required": ["source_revision", "cost_model", "data_timestamp", "status"],
"properties": {
"source_revision": { "type": "string", "minLength": 1 },
"cost_model": { "type": "string", "minLength": 1 },
"data_timestamp": { "type": "string", "minLength": 1 },
"status": { "enum": ["verified", "legacy_missing", "unavailable"] }
},
"additionalProperties": false
}
},
"additionalProperties": false
}
Loading
Loading