55Required top-level fields:
66
77``` text
8- schema_version: "5"
8+ schema_version: "6"
9+ contract_version: "model_recommendations.v6"
910as_of: ISO date
11+ reference_time: exclusive start of the UTC day after as_of
1012generated_at: ISO datetime
13+ expires_at: generated_at + 7 days
14+ input_digest: 64 lowercase hexadecimal SHA-256 characters
15+ freshness.ai_signal
16+ freshness.theme_momentum
1117mode: "model_recommendations"
1218cadence: "daily" | "weekly" | "monthly"
1319audience_scope: "non_personalized_model_research"
@@ -19,12 +25,10 @@ final_decisions: object, optional
1925policy: object
2026```
2127
22- The current CLI and scheduled workflows remain explicit v5 producers. Readers
23- accept both v5 and v6, but a producer must opt in to v6 only after it can emit
24- all v6 provenance fields. No v6 field is silently added to, or accepted on, a
25- v5 report.
28+ The current CLI and scheduled workflows produce v6. Readers continue to accept
29+ legacy v5 reports, but no v6 field is silently accepted on a v5 report.
2630
27- ### V6 dual-read migration contract
31+ ### V6 default contract
2832
2933A v6 report uses ` contract_version = model_recommendations.v6 ` and adds these
3034required top-level fields:
@@ -307,9 +311,9 @@ Required manifest fields:
307311``` text
308312manifest_type = model_recommendation_report
309313artifact_type = model_recommendations
310- contract_version = model_recommendations.v5
311- schema_version = 5
312- version = <as_of>-<cadence>-schema-5 -<run-or-sha>
314+ contract_version = model_recommendations.v6
315+ schema_version = 6
316+ version = <as_of>-<cadence>-schema-6 -<run-or-sha>
313317source_project = QuantAdvisorResearch
314318producer.repository
315319producer.git_sha
@@ -320,10 +324,11 @@ artifacts.json.sha256
320324artifacts.markdown.sha256
321325policy
322326generated_at
327+ input_digest
323328```
324329
325- For a v6 report, the manifest additionally carries the exact top-level
326- ` input_digest ` . V5 manifests remain unchanged and omit this field.
330+ The v6 manifest carries the exact top-level ` input_digest ` . Legacy v5 manifests
331+ remain readable and omit this field.
327332
328333## Source Mode
329334
0 commit comments